1

这是MYSQL查询问题

首先,假设我们有

[ALL_MENU]

name
-----
pasta
pizza

人们下令

ordered

customer name status              
john     pasta   delivered        
kim      pasta   delivered       
john     pizza   delivered        
john     pasta   delivered        

我想通过订购的桌子找到订购所有菜单的人

在这个例子中,kim 只点了意大利面,所以不应该包括在内,但 john 点了意大利面和比萨,所以应该包括在结果中。

是否有任何类型的查询可以执行“For 循环”功能?

谢谢你

(ps,现在我只允许使用

来自mysql的一些基本功能命令

分组依据,创建视图,存在,全部,不存在,独特的某某)

==================================================== ========================

好的,从答案来看,当(客户,名称)是主键时,所有菜单项的计数都有效但是如果我添加数据列,主键为(客户,名称,数据)

   customer name status              date
        john     pasta   delivered        3/4
        kim      pasta   delivered        3/5
        john     pasta   delivered        3/5

这是我为 john 制作的新专栏,他订购了唯一有 2 个不同日期的意大利面,但 john 的订单数计为 2。

所以计数方法不适用于此

我们如何解决这个问题?

4

1 回答 1

2

for 循环的功能是游标。(仅供参考,大多数 DBMS 都有这样的结构。)

但是,当一个普通的旧查询就可以了时,永远不要使用游标。

这是一种可能的解决方案:

SELECT customer
FROM ordered
GROUP BY customer
HAVING COUNT(DISTINCT name) = (SELECT COUNT(*) FROM all_menu)

(这假设在ordered中找到所有名称all_menus,例如有外键。如果没有,则必须JOIN all_menu ON ordered.name = all_menu.nameFROM子句中添加。)

编辑:仅“简单”(!)命令:

SELECT customer
FROM ordered o1
WHERE NOT EXISTS (
    SELECT * FROM all_menu
    WHERE name NOT IN (SELECT name FROM ordered o2 WHERE o1.customer = o2.customer)
)
于 2013-10-30T02:19:20.257 回答