gpt4 book ai didi

mysql - 在不同的 MySQL 表中选择一个连接到其他几个的东西

转载 作者:行者123 更新时间:2023-11-30 23:20:10 24 4
gpt4 key购买 nike

假设我有一个包含 id、customer_id、order_date 和其他一些内容的订单表。我还有一个元素表,其中包含人们可以订购的元素,包括元素 ID、元素名称和价格。最后还有一个名为 c 的表,它连接 order_id 和 item_id。

我想要做的是从包含我按名称搜索的某些项目的所有订单的订单表中获取一些数据。

我可以做这样的事情,但这显然是一个糟糕的解决方案,即使只有两个项目,更不用说五个左右了。但我认为它说明了我在寻找什么:

SELECT o.id, customer_id, order_date
FROM orders AS o, c AS c1, items AS i1, c AS c2, item AS i2
WHERE item_name = 'foo' AND c1.item_id = i1.id AND c1.order_id = o.id
AND item_name = 'bar' AND c2.item_id = i2.id AND c2.order_id = o.id

有人可以建议一个更快的工作解决方案吗?我认为这种类型的查询很常见,所以我想至少有一种快速而巧妙的解决方案。 :)

需要考虑的一件事是 item_names 不一定是唯一的,这意味着任何使用 HAVING COUNT(...) > 1 的解决方案都会检索两次包含“foo”而不是至少一个“foo”的订单' 和一个 'bar'。

编辑:

一些人建议我使用“WHERE item_name IN('foo','bar')”,然后删除了他们的答案,但我正在寻找的查询应该检索包含“foo”和“bar',不只是其中之一。如果我应该使用显式连接以不同方式构造上面的示例查询,我想它看起来像这样:

SELECT o.id, customer_id, order_date
FROM orders AS o
INNER JOIN c AS c1
ON c1.order_id = o.id
INNER JOIN items AS i1
ON i1.id = c1.item_id
INNER JOIN c AS c2
ON c2.order_id = o.id
INNER JOIN items AS i2
ON i2.id = c2.item_id
WHERE i1.item_name = 'foo'
AND i2.item_name = 'bar'
GROUP BY o.id

(需要相当长的时间来执行)

最佳答案

Rudy Limeback总而言之:

SELECT o.id
FROM (SELECT c.order_id
FROM items
INNER JOIN c
ON c.itemid = items.id
WHERE items.item_name IN ('foo','bar')
GROUP BY c.orderid
HAVING COUNT(DISTINCT item_name) = 2
) AS these
INNER JOIN orders
ON orders.id = these.orderid

关于mysql - 在不同的 MySQL 表中选择一个连接到其他几个的东西,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15867780/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com