我有一个SQL查询问题似乎很容易修复,但我无法弄清楚如何让它工作..
我基本上有两个表:Orders和OrderDetails ...每个订单都有几个产品,在OrderDetails表中注册。 我希望能够找到所有有2种产品的订单;一个具有特定的参考,另一个具有特定的描述。
这是我写的查询:
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 reccord,它应返回订单号QQ00000QQ
有人可以向我解释如何让查询工作?非常感谢!!
答案 0 :(得分:2)
如果我理解正确,您希望找到一个订单,其中一个订单行满足条件(reference =“F40”),另一个订单行满足另一个条件(description =“Epee”)。
执行单个连接无法解决此问题,因为您将搜索满足两个条件的一个订单行。你应该做这样的事情:
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"
)
答案 1 :(得分: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
答案 2 :(得分: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