0

簡単に修正できると思われる SQL クエリの問題がありますが、それを機能させる方法がわかりません..

基本的に、Orders と OrderDetails の 2 つのテーブルがあります。各注文には複数の製品があり、OrderDetails テーブルに登録されています。2 つの製品を持つすべての注文を検索できるようにしたい。1 つは特定の参照を持ち、もう 1 つは特定の説明を持ちます。

ここに私が書いたクエリがあります:

SELECT
  o.orderNumber

FROM
  `order` AS o

JOIN
  `orderDetail` AS d ON o.id = d.orderID

WHERE
  d.reference = "F40" AND 
  d.description = "Epee"

これがフィドルです:http://sqlfiddle.com/#!2/bd94e/1

クエリは 0 レコードを返し、注文番号 QQ00000QQ を返す必要があります

誰かが私にそのクエリを機能させる方法を説明してもらえますか?? どうもありがとうございました!!

4

3 に答える 3

2

私の理解が正しければ、条件 (参照 = "F40") を満たす 1 つのオーダーラインと、別の条件 (説明 = "エペ") を満たす別のオーダーラインを含むオーダーを検索する必要があります。

両方の条件を満たす 1 つのオーダーラインを検索することになるため、単一の結合を実行しても、これは解決されません。代わりに次のようにする必要があります。

SELECT orderNumber FROM `order`
WHERE id IN (
    SELECT orderid FROM orderDetail od1
    INNER JOIN orderDetail od2
    USING (orderid)
    WHERE od1.reference = 'F40' AND od2.description = "Epee"
)
于 2013-10-03T09:02:11.043 に答える
0

クエリがデータと一致しません。d.reference = "F40" AND に一致するレコードはありませんd.description = "Epee"

注文番号QQ00000QQを返品したい場合は、

SELECT
  o.orderNumber

FROM
  `order` AS o

JOIN
  `orderDetail` AS d ON o.id = d.orderID

WHERE
  d.reference = "F40" AND 
  d.description = "Wire" //Note change to condition
于 2013-10-03T08:54:59.903 に答える
0

同じフィールドを作成する必要があると思います。例: order= id_order orderDetail= id_order

次に、すべてを検索する場合は、同じ id_order を挿入する必要があります。例 :

INSERT INTO `order`
(id_order , orderNumber)
VALUES
('1','QQ00000QQ'),
('2','AA11111AA'),
('3','LO00000OL'),
('4','AA12345BB');


INSERT INTO `orderDetail`
(orderID, reference, description,id_order)
VALUES
(1, 'F40', 'Wire','1'),
(1, 'Q25', 'Epee','1'),
(1, 'Z99', 'Mask','1'),
(2, 'F40', 'Wire','2'),
(3, 'Q25', 'Epee','2'),
(4, 'F40', 'Wire','4'),
(4, 'Z99', 'Mask','3');

SELECT
  o.orderNumber

FROM
  `order` AS o

JOIN
  `orderDetail` AS d ON o.id = d.orderID

WHERE
  d.reference = '4'

GROUP BY
  o.id
于 2013-10-03T08:52:06.123 に答える