我正在为我的作业分配一个问题,在该问题中,我必须检查订单数据库,以查看是否有某本书以相同的顺序被多次订购。
这是一个例子:

+----------+------------+---------+----------+-------------+
| order_id | order_line | book_id | quantity | order_price |
+----------+------------+---------+----------+-------------+
| 33034    | 1          | 1619    | 1        | 29.99       |
| 33034    | 2          | 6789    | 1        | 25.95       |
| 33034    | 3          | 1619    | 5        | 15.95       |
| 33189    | 1          | 1667    | 2        | 25.95       |
| 40564    | 1          | 4739    | 2        | 20.99       |
| 11357    | 1          | 1667    | 2        | 35.95       |


因此,命令33034两次订购了书1619。我无法弄清楚如何仅提取正确的订单ID
截至目前,看来我的查询可以测试多个book_id中的一个,然后测试关联的order_id,但我无法获得将两者连接的逻辑。
该查询必不可少地说“同一本书?检查!关联的order_id的订购量是否超过任何两本书?检查!”我需要它来确保订购了不止一本相同的书。

我不能使用联接,只能使用子查询。
我很难缠到下一步要走的地方,但这是到目前为止。

select order_id
from a_bkorders.order_details
where book_id in (
     select book_id
     from a_bkorders.order_details
     group by book_id
     having count(book_id)>1)
group by order_id
having count(order_id)>1)


感谢您的任何建议帮助!

最佳答案

为什么不只是使用

SELECT a.order_id FROM
(SELECT order_id, book_id, COUNT(*)
FROM a_bkorders.order_details
GROUP BY order_id, book_id
HAVING count(*)>1
) AS a


从技术上讲,您应该使用SELECT DISTINCT(因为一个订单可能有两个书ID,每个书ID被订购两次)。但是否则,这应该做得到(您遵循逻辑,是吗?它使用子查询来查找多个订单和书籍ID串联出现的顺序;从那里,从那个order_id,book_id和count列表中获取order_ids ()的count()> 1)。

现在,所有这一切都在一个特定的假设下进行,即“如果某本书按同一顺序多次订购”->出现为订单项两次的任何书(例如count()> 1),而不是任何一本书> 1的数量(例如count()> 1或数量> 1)

如果您需要检查数量> 1或count(*)是否大于一,我建议以下方法:

SELECT a.order_id FROM
(SELECT order_id, book_id, SUM(quantity)
FROM a_bkorders.order_details
GROUP BY order_id, book_id
HAVING SUM(quantity) > 1
) AS a


如果不明显,则如果count(*)> 1,则SUM(quantity)将> 1;如果数量> 1,则SUM(quantity)也将> 1。

关于mysql - 查询以获取重复项,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23091553/

10-11 03:08
查看更多