for mysql查询中的循环功能

时间:2013-10-30 02:18:07

标签: mysql database

这是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方法不适用于此

我们如何解决这个问题?

1 个答案:

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