mysql查询中的for循环功能

mysql查询中的for循环功能,mysql,database,Mysql,Database,这是MYSQL查询问题 首先,假设我们有 [ALL_MENU] name ----- pasta pizza 人们命令 ordered customer name status john pasta delivered kim pasta delivered john pizza delivered john pasta delivered 我想浏览

这是MYSQL查询问题

首先,假设我们有

[ALL_MENU]

name
-----
pasta
pizza
人们命令

ordered

customer name status              
john     pasta   delivered        
kim      pasta   delivered       
john     pizza   delivered        
john     pasta   delivered        
我想浏览一下订好的桌子,找到所有点菜单的人

在这个例子中,kim只点了意大利面,所以不应该包括在内 但是约翰同时点了意大利面和比萨饼,所以结果中应该包括这两种食物

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

多谢各位

(ps,现在我只允许使用

mysql中的一些基本函数命令

分组依据、创建视图、存在、全部、不存在、唯一等)

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

好的,从答案来看 当(客户、名称)是主键时,所有菜单项的计数都是work 但是,如果我将数据列和主键添加为(customer、name、data),会怎么样

这是我写的新专栏 约翰点了唯一有两个不同日期的意大利面, 但约翰的订单数为2

所以计数方法对此不起作用


我们如何解决这个问题?for循环的功能是一个。(仅供参考,大多数数据库管理系统都有这样的结构。)

但是,当一个普通的旧查询可以正常工作时,千万不要使用游标

以下是一种可能的解决方案:

SELECT customer
FROM ordered
GROUP BY customer
HAVING COUNT(DISTINCT name) = (SELECT COUNT(*) FROM all_menu)
(这假设在
ordered
中的所有名称都可以在
all_菜单中找到,例如,有外键。如果没有,则必须在
FROM
子句中添加
JOIN all_菜单ON ordered.name=all_菜单.name
。)

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

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)
)

目前,我只允许使用简单的推荐,如存在、全部、自然连接等。您的“等”留下了一些不满意的地方。
分组依据
具有
不同的
、和
计数
中的哪一项不是简单的“命令”?我在我的问题上补充了一些内容您可以尝试
分组依据
,如果这样做,请确保使用
订单依据
。虽然不需要(或不需要)IMHO
GROUP\u CONCAT
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)
)