mysql - 从一个表中选择所有记录,并显示是否在另一个表中找到该记录的额外字段

标签 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,那么我需要将标识符添加到用户表中。到目前为止,这是我尝试过的:

SELECT users.*, if(list.CUSTOMID IS NULL, FALSE, TRUE) AS matched from users LEFT JOIN list ON (users.CUSTOMID=list.CUSTOMID)

但是我得到了很多重复项,因为列表中有多个记录具有相同的 CUSTOMID。

最佳答案

您可以使用 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;

关于mysql - 从一个表中选择所有记录,并显示是否在另一个表中找到该记录的额外字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42304990/

相关文章:

mysql - 选择和删除

java - 在 MySql 中以原子方式获取和增加序列值

sql - 确定性字符串替换和整理

sql - 如何创建验证 friend 的 friend 的 SQL 查询

mysql - 想知道sql语句是否正确

php - 向多个表中插入数据 PHP MySQL

mysql - 将当前年份作为 MySQL 中的别名

php - 将php数组从csv插入mysql

Java - 查找用于生成特定行的 IN 子句的周长

sql - 连接时避免字符串和序列之间有空格