mysql - 右外连接避免重复

标签 mysql sql duplicates left-join

有人可以帮助解决这种复杂的情况吗

我有两个表

Table1:

id |  status     
----------------
1  |  New       
2  |  New   
3  |  Pending

table2在哪里

表 2:

id  | table1_id
---------------
1   | 1
2   | 1
3   | 1
4   | 2
5   | 2
6   | 2
7   | 3
8   | 3

我正在尝试提取状态值,所以尝试使用简单的方法

SELECT t1.status FROM table1 t1 LEFT OUTER JOIN table2 t2 ON t1.id=t2.table1_id

给出结果

New 
New 
New 

我不能使用 distinct,因为我在计算,有什么办法可以避免重复吗?

对于 case 语句,我需要这样的结果

 id  |  New  | Pending
 ---------------------
 1   |   1   |   0
 2   |   1   |   0
 3   |   0   |   1

现在得到

id  |  New  | Pending
 ---------------------
 1   |   3   |   0
 2   |   3   |   0
 3   |   0   |   2

最佳答案

SELECT DISTINCT t1.status 将为您提供不同的值。但是,由于您不想使用 DISTINCT,您可以添加 GROUP BY t1.status 它与 DISTINCT 相同:

SELECT t1.status, COALESCE(COUNT(DISTINCT t2.table1_id), 0) AS total
FROM table1 t1 
LEFT OUTER JOIN table2 t2 ON t1.id=t2.table1_id
GROUP BY t1.status;

但这种方式 GROUP BY 仅对不同的值无用,最好使用 DISTINCT

关于mysql - 右外连接避免重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20328282/

相关文章:

c# - 为什么会出现 SQL 异常?

java - MySql自动增量错误

php - 表 1 中的数据不会移动到表 2

java - 是否可以通过我的 Eclipse 项目一次在表中插入多个列的值?

sql - 计算今天与 Oracle SQL 中的雇佣日期之间的天数?

javascript - 如何从对象数组中删除所有重复项?

python - Django原始查询动态查询

php - MySQL 行排序 : How to set up and use a `position` column for row ordering?

java - 用整数 1-10 填充数组,同时检查该整数是否已在数组中

python - 删除 Python 中连续部分重复的元素