简化了,我有两个表 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
答案 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;
这不应返回其他国家(例如德国)的名称。