0

我有一个似乎很容易解决的 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 记录,应该返回订单号 QQ00000QQ

有人可以向我解释如何使该查询起作用吗?非常感谢!!

4

3 回答 3

2

如果我对您的理解正确,您希望找到一个订单线满足条件(参考 =“F40”)和另一个订单线满足另一个条件(描述 =“重剑”)。

做一个单一的连接不会解决这个问题,因为您将搜索一个满足这两个条件的订单线。你应该这样做:

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