如何查询显示所有数据时并非全部相关

时间:2016-12-09 03:27:30

标签: mysql

我想问......

如果我有数据但数据与另一个表相关

但我希望输出显示所有数据

通常如果数据在另一个表中相关,我使用INNER JOIN但输出只是数据有关系,如果没有关系,则不显示..如果我使用LEFT JOIN或RIGHT JOIN并非显示所有数据..如果我使用UNION数据重复

这个只是示例字段..真实那么多的字段

TABLE A

ID    |     NAMA     |   
----------------------
1     |     Rina     |   
2     |     Deni     |
3     |     Muti     |
4     |     Sina     |
5     |     Sasa     |


TABLE B
ID    |     Rumah    | 
----------------------  
1     |     Jabar    |   
2     |     Jateng   |
3     |     Jatim    |


OUTPUT THAT I WANT

ID    |     NAMA     |   Rumah 
---------------------------------- 
1     |     Rina     |   Jabar
2     |     Deni     |   Jateng
3     |     Muti     |   Jatim
4     |     Sina     |   -
5     |     Sasa     |   -

2 个答案:

答案 0 :(得分:1)

如果我正确理解您的问题,那么给定的ID可能只有名字或姓氏,但不能同时具有。在这种情况下,只需执行左连接或右连接将导致数据丢失。这里的一种方法是在ID上的两个表之间进行完全外连接,然后使用COALESCE来适当地处理可能缺少的数据。

SELECT COALESCE(t1.ID, t2.ID) AS ID,
       COALESCE(t1.NAMA, '-') AS NAMA,
       COALESCE(t2.Rumah, '-') AS Rumah
FROM TableA t1
LEFT JOIN TableB t2
    ON t1.ID = t2.ID
UNION
SELECT COALESCE(t1.ID, t2.ID),
       COALESCE(t1.NAMA, '-')
       COALESCE(t2.Rumah, '-')
FROM TableA t1
RIGHT JOIN TableB t2
    ON t1.ID = t2.ID

答案 1 :(得分:1)

简短版本:

SELECT COALESCE(a.ID, t2.ID),
       COALESCE(a.NAMA, '-')
       COALESCE(b.Rumah, '-')
FROM TableA a
LEFT JOIN TableB b
    ON a.ID = b.ID
RIGHT JOIN TableB t2
    ON a.ID = b.ID