2

SQL ステートメントに問題があります。

基本的に私は5つのテーブルを持っています。これらは次のとおりです。

Books、Records、OrderedBooks、OrderedRecords、および Orders。

My orders には顧客が行うすべての注文が含まれ、MyorderedRecords には、顧客の注文に関連するすべての書籍とレコードが含まれます。また、books and records テーブルには、各書籍とレコードに関連する情報が含まれていることは明らかです。

私のorderedrecordsとorderedbooksには、対応する本/レコードに関連するBookIDとRecordIDが含まれています。

booktitle、bookcost、bookQuantity、booksTotal(price*quantity) recordtitle、recordcost、recordQuantity、recordsTotal を表示する必要があるアプリを作成しています。

書籍とレコードの合計は、SQL で数学関数を使用して計算する必要はありません。

これまでのところ、私が望むものを正確に提供することができましたが、3つの本の注文と1つのレコードの注文があり、レコードの注文の残りの2行については、単にデータを複製するのではなく、データを複製します空の。機能していない左結合と右結合を試しました。

これが私のSQLステートメントです...

SELECT Books.Title AS BookTitle
, Books.Cost AS BookCost
, OrderedBooks.Quantity AS BookQuantity
, OrderedBooks.Total AS BooksTotal
, Records.Title AS RecordsTitle
, Records.Cost AS RecordsCost
, OrderedRecords.Quantity AS RecordQuantity
, OrderedRecords.Total AS RecordsTotal 
-- Nothing wrong with select part
FROM Orders 
INNER JOIN OrderedBooks ON OrderedBooks.OrderID = Orders.ID 
FULL OUTER JOIN OrderedRecords ON OrderedRecords.OrderID = Orders.ID 
LEFT OUTER JOIN Books ON OrderedBooks.BookID = Books.ID 
LEFT OUTER JOIN Records ON OrderedRecords.RecordID = Records.ID 
WHERE (Orders.ID = 9)

正しい注文番号の正しい注文された本とレコードを返しますが、重複した行を取り除くことができないようです

4

4 に答える 4

5

ブックス.id:

SELECT Books.Title AS BookTitle
, Books.Cost AS BookCost
, OrderedBooks.Quantity AS BookQuantity
, OrderedBooks.Total AS BooksTotal
, Records.Title AS RecordsTitle
, Records.Cost AS RecordsCost
, OrderedRecords.Quantity AS RecordQuantity
, OrderedRecords.Total AS RecordsTotal
FROM Orders 
INNER JOIN OrderedBooks ON OrderedBooks.OrderID = Orders.ID 
FULL OUTER JOIN OrderedRecords ON OrderedRecords.OrderID = Orders.ID 
LEFT OUTER JOIN Books ON OrderedBooks.BookID = Books.ID 
LEFT OUTER JOIN Records ON OrderedRecords.RecordID = Records.ID 
WHERE (Orders.ID = 9)
GROUP BY Books.ID
于 2014-03-25T09:55:00.907 に答える
1

単純な SELECT DISTINCT はどうでしょうか。

SELECT DISTINCT
Books.Title AS BookTitle
, Books.Cost AS BookCost
, OrderedBooks.Quantity AS BookQuantity
, OrderedBooks.Total AS BooksTotal
, Records.Title AS RecordsTitle
, Records.Cost AS RecordsCost
, OrderedRecords.Quantity AS RecordQuantity
, OrderedRecords.Total AS RecordsTotal 
-- Nothing wrong with select part
FROM Orders 
INNER JOIN OrderedBooks ON OrderedBooks.OrderID = Orders.ID 
FULL OUTER JOIN OrderedRecords ON OrderedRecords.OrderID = Orders.ID 
LEFT OUTER JOIN Books ON OrderedBooks.BookID = Books.ID 
LEFT OUTER JOIN Records ON OrderedRecords.RecordID = Records.ID 
WHERE (Orders.ID = 9)
于 2013-02-10T22:14:11.243 に答える
0

1 つのオーダーに属する書籍とレコードの間には関連性がないため、これらを結合するのではなく、2 つの異なるクエリを使用して書籍とレコードに関する情報を検索します。

1つの可能性は次のとおりです。

SELECT 'Book' AS Type
, Books.Title AS Title
, Books.Cost AS Cost
, OrderedBooks.Quantity AS Quantity
, OrderedBooks.Total AS Total
FROM Orders 
INNER JOIN OrderedBooks ON OrderedBooks.OrderID = Orders.ID 
INNER JOIN Books ON OrderedBooks.BookID = Books.ID 
WHERE (Orders.ID = 9)

UNION

SELECT 'Record' AS Type
, Records.Title AS Title
, Records.Cost AS Cost
, OrderedRecords.Quantity AS Quantity
, OrderedRecords.Total AS Total
FROM Orders 
INNER JOIN OrderedRecords ON OrderedRecords.OrderID = Orders.ID 
INNER JOIN Records ON OrderedRecords.RecordID = Records.ID 
WHERE (Orders.ID = 9)
于 2013-02-10T23:50:43.040 に答える
0

GROUP BY ステートメントを使用してみてください

このような:

SELECT Books.Title AS BookTitle
, Books.Cost AS BookCost
, OrderedBooks.Quantity AS BookQuantity
, OrderedBooks.Total AS BooksTotal
, Records.Title AS RecordsTitle
, Records.Cost AS RecordsCost
, OrderedRecords.Quantity AS RecordQuantity
, OrderedRecords.Total AS RecordsTotal
FROM Orders 
INNER JOIN OrderedBooks ON OrderedBooks.OrderID = Orders.ID 
FULL OUTER JOIN OrderedRecords ON OrderedRecords.OrderID = Orders.ID 
LEFT OUTER JOIN Books ON OrderedBooks.BookID = Books.ID 
LEFT OUTER JOIN Records ON OrderedRecords.RecordID = Records.ID 
WHERE (Orders.ID = 9)
GROUP BY BookTitle
于 2013-02-11T01:45:56.633 に答える