我想获取所有用户的列表,并标记那些也出现在另一个名为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
我该怎么写它才能得到我想要的东西?
答案 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
不是)