我有2张桌子。
用户:
ID CUSTOMID NAME
1 X543 John
2 X354 Jane
3 X389 Jack
4 X123 James
列表:
ID CUSTOMID NAME ADDRESS
1 X543 John address1
2 X543 John address2
3 X543 John address3
4 X543 John address4
5 X543 John address5
6 X354 Jane address1
7 X354 Jane address2
8 X354 Jane address3
9 X389 Jack address1
10 X389 Jack address2
11 X389 Jack address3
12 X389 Jack address4
13 X389 Jack address5
14 X389 Jack address6
我需要以下结果:
ID CUSTOMID NAME MATCHED
1 X543 John 1
2 X354 Jane 1
3 X389 Jack 1
4 X123 James 0
如果列表中有CUSTOMID,那么我需要在users表中添加标识符。这是我到目前为止所尝试的内容:
SELECT users.*, if(list.CUSTOMID IS NULL, FALSE, TRUE) AS matched from users LEFT JOIN list ON (users.CUSTOMID=list.CUSTOMID)
但是我得到了很多重复项,因为列表中有多个记录具有相同的CUSTOMID。
答案 0 :(得分:1)
您可以使用CASE和EXISTS
Select u.*,
case when exists (
select 1 from list l where u.customid =l.customid
) then 1 else 0 end matched
From users u;
答案 1 :(得分:1)
仅稍微修改现有查询...
SELECT DISTINCT u.*
, COALESCE(l.CUSTOMID IS NOT NULL,0) matched
FROM users u
LEFT
JOIN list l
ON l.CUSTOMID = u.CUSTOMID
答案 2 :(得分:-1)
我认为您可以使用GROUP_ BY语句,因此您没有重复项,您应该在两个表中对customID进行分组。 但是,您也可以在select语句中使用关键字DISTINCT(在属性customID之前),DISTINCT的效率低于GROUP_BY。