这是MYSQL查询问题
首先,我们说
[ALL_MENU]
name
-----
pasta
pizza
和人们订购
ordered
customer name status
john pasta delivered
kim pasta delivered
john pizza delivered
john pasta delivered
我想通过有序的表找到任何订购所有菜单的人
在这个例子中,kim只订购了意大利面,所以不应该包含它 但约翰订购了意大利面和比萨饼,所以它应该包括在结果中。
是否有任何类型的查询来执行'For loop'功能?
谢谢
(ps,现在我只允许使用
来自mysql的一些基本功能命令
分组依据,创建视图,存在,全部,不存在,唯一等等)
=============================================== ==========================
好的,从答案来看 当(客户,名称)是主键时,所有菜单项的计数都是有效的 但是,如果我添加数据列,主键为(客户,名称,数据)
,该怎么办? customer name status date
john pasta delivered 3/4
kim pasta delivered 3/5
john pasta delivered 3/5
这是我制作的新专栏 约翰订购了2种不同日期的面食, 但johns的订单数量为2.
所以count方法不适用于此
答案 0 :(得分:2)
for循环的功能是cursor。 (仅供参考,大多数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.name
中添加FROM
1}}子句。)
编辑:"简单"(!)命令:
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)
)