mysql - 加入时从原始表中删除重复条目

标签 mysql sql join

我有 2 个表: 地址和我已发送的文件日志(名为发送)。

对于给定的文件,我想获取所有地址,以及他们是否收到该文件。

到目前为止我得到的是:

SELECT            *
,                 CASE 
                      WHEN send.fileid = 1 THEN 1 
                      ELSE send.fileid = NULL 
                  END as file1 
FROM              send
RIGHT OUTER JOIN `adress` 
              ON `send`.adressid = `adress`.`id`

问题是,当一个地址有两个不同的文件时,它们会被列出两次。我怎样才能改变声明来解决这个问题?

示例数据

*adress*
1 Adrian
2 Christian
3 Max
4 Alex

*file*
1 music
2 video
3 document

*send*
adress:1 file:1
adress:1 file:2 -
adress:3 file:1
adress:4 file:2 -
adress:4 file:3

when i browse the file 2, i want to see:
X Adrian
X Alex
Christian
Max

TLDR:我想要我所有的地址(一次)具有特定文件 ID 或 null。

提前致谢。

最佳答案

一种方法是将条件放在子查询中,让外部连接完成所有繁重的工作:

SELECT    a.*, s.fieldid
FROM      address a
LEFT JOIN (SELECT filedid, addressid
           FROM   send
           WHERE  fileid = 1) ON s.addressid = a.id

关于mysql - 加入时从原始表中删除重复条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36796082/

相关文章:

mysql - 如何在 "bit field"中最好地执行分组?

mysql - 选择对 table_link 的计数作为多对多关系的桥梁

python - 如何连接 2 个数据框并基于过滤器 pyspark 添加新列

当聚合函数相等时 MySQL Group 返回多个结果

mysql - 在父表上使用 WHERE 和 GROUP BY 的多个 JOIN

php - 制作两个表取决于它们是否有 0 或 1

php - php 中的 SQL 查询无法按要求工作

mysql - 适合大表的良好数据库,具有简单的键访问

sql - 如何在 SQL 中查询具有相同值的组

sql - 在 SQL 中编写左/右 JOIN 时是否使用 OUTER 关键字?