mysql查询中的for循环功能
这是MYSQL查询问题 首先,假设我们有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 我想浏览
[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)
)
目前,我只允许使用简单的推荐,如存在、全部、自然连接等。您的“等”留下了一些不满意的地方。分组依据
、具有
、不同的
、和计数
中的哪一项不是简单的“命令”?我在我的问题上补充了一些内容您可以尝试分组依据
,如果这样做,请确保使用订单依据
。虽然不需要(或不需要)IMHOGROUP\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)
)