如何在条件下选择所有行但合并信息

时间:2019-09-23 14:30:40

标签: sql

简化了,我有两个表 NAMES (带有列 ID NAME )和地址(带有 COUNTRY CITY NAME_ID )。


名称示例:

1 - Hans
2 - Mark
3 - Joseph

地址示例:

Denmark - Kopenhagen - 1
Germany - Berlin - 3

我需要选择所有根本不具有地址或与城市名称相同但仅在其国家/地区是...丹麦的名称。

SELECT
NA.NAME AS NAME,
AD.CITY AS CITY
FROM NAMES AS NA
LEFT JOIN ADRESSES AS AD ON AD.NAME_ID = NA.ID

现在我添加类似内容

WHERE AD.COUNTRY="Denmark"

WHERE (AD.COUNTRY="Denmark" OR AD.COUNTRY=NULL)

我仍然只获得丹麦城市名称的列表,但没有列出所有根本没有地址/城市的其他名称。

删除条件后,我当然会获得所有名称和现有城市,甚至在所有其他国家/地区也是如此。

所需的结果将是:

Hans - Kopenhagen
Mark - NULL

2 个答案:

答案 0 :(得分:1)

我猜你是说WHERE AD.COUNTRY='Denmark'不是WHERE AD.CITY='Denmark'。另外,将WHERE子句与LEFT JOIN一起使用会使它像INNER JOIN。因此,将您的条件转移到LEFT JOIN子句-

SELECT NA.NAME AS NAME,
       AD.CITY AS CITY
FROM NAMES AS NA
LEFT JOIN ADRESSES AS AD ON AD.NAME_ID = NA.ID
WHERE AD.COUNTRY='Denmark' OR AD.COUNTRY IS NULL

答案 1 :(得分:0)

  

我需要选择所有根本不具有地址或与城市名称相同但仅在其国家/地区是...丹麦的名称。

我相信你想要

SELECT NA.NAME AS NAME, AD.CITY AS CITY
FROM NAMES NA LEFT JOIN 
     ADRESSES AD
     ON AD.NAME_ID = NA.ID
WHERE AD.COUNTRY = 'DENMARK' OR AD.COUNTRY IS NULL;

这不应返回其他国家(例如德国)的名称。