搜索包含两个产品的订单,一个具有特定参考,另一个具有特定描述

时间:2013-10-03 08:34:04

标签: mysql sql join

我有一个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

有人可以向我解释如何让查询工作?非常感谢!!

3 个答案:

答案 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