从一个表中选择所有记录,其中包含额外字段,以显示是否在另一个表中找到该记录

时间:2017-02-17 18:26:22

标签: mysql sql

我有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。

3 个答案:

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