MYSQL:根据值是否在第二个表

时间:2015-07-06 09:54:52

标签: mysql

我想获取所有用户的列表,并标记那些也出现在另一个名为memo的表中(基于其唯一标识符),如果某个行值为16,则mp表的每一行都有一个worker和备忘录。 worker是唯一的用户ID。因此,如果u.keyid = mp.worker和mp.memo = 16,则用户在备忘录(例如16)中。这是我写的查询。

SELECT DISTINCT  
            u.name AS name,
            IF ((mp.worker = u.keyid AND mp.memo = 16),1,0) AS isin
        FROM users AS u, mp;

如果表格mp中有一个条目,那么isin应为1,因此备忘录16的mp.worker = u.keyid。

然而,这个查询为我提供了一个完整的用户列表0和所有用户(再次)在备忘录中的1.所以说用户是John,Michael,Sarah和Jane。只说约翰和简在会议中我得到了这个结果:

John       0
Micahel    0
Sarah      0
Jane       0
John       1
Jane       1

但我想要的是:

John       1
Micahel    0
Sarah      0
Jane       1

我该怎么写它才能得到我想要的东西?

1 个答案:

答案 0 :(得分:0)

您的查询正在执行EXISTS(笛卡尔积)。

您只需要一个left join子句(也可以使用EXISTS,但我认为SELECT u.Name CASE WHEN EXISTS (Select null from mp where mp.worker = u.keyid and mp.memo = 16) THEN 1 else 0 END AS isin FROM users u 更清晰)

IF

您当然可以使用CASE... WHEN子句代替IF(这是ANSI,而type => count不是)