Mysql 如何编写SQL查询以返回具有空字段的行?
我想编写一个查询,输出所有行,包括其中有空字段的行。但是我的查询只输出包含所有非空字段的行 这就是我的意思 这些是我的桌子 表1:发起人 表2:联系方式 这是我的问题:Mysql 如何编写SQL查询以返回具有空字段的行?,mysql,Mysql,我想编写一个查询,输出所有行,包括其中有空字段的行。但是我的查询只输出包含所有非空字段的行 这就是我的意思 这些是我的桌子 表1:发起人 表2:联系方式 这是我的问题: SELECT s.sponsor_name, s.sub_name, SUM(s.amount), COUNT(s.id), c.contact_name, c.tel FROM sponsor as s, contact as c WHERE (s.id = c.sponsor_id) an
SELECT s.sponsor_name, s.sub_name, SUM(s.amount),
COUNT(s.id), c.contact_name, c.tel
FROM sponsor as s, contact as c
WHERE (s.id = c.sponsor_id) and (c.is_primary = 1)
GROUP BY sponsor_name, sub_name
以下是输出:
我希望输出显示所有3个赞助商,如下所示:
那么最有可能的是:
SELECT s.sponsor_name, s.sub_name, SUM(s.amount),
COUNT(s.id), c.contact_name, c.tel
FROM sponsor as s
LEFT JOIN contact as c ON (s.id = c.sponsor_id) and (c.is_primary = 1)
GROUP BY sponsor_name, sub_name
左联接
负责将前导表数据(在本例中)用于要保留的行。这是因为您正在执行内部联接
,该联接会删除不匹配的行。您需要使用左联接:
SELECT
s.sponsor_name,
s.sub_name,
SUM(s.amount),
COUNT(s.id),
c.contact_name,
COALESCE(c.tel, 'N/A') AS tel
FROM sponsor AS s
LEFT JOIN contact AS c
ON s.id = c.sponsor_id
AND c.is_primary = 1
GROUP BY s.sponsor_name, s.sub_name
此外,您应该使用显式的JOIN
语法,而不是旧式语法
SELECT s.sponsor_name, s.sub_name, SUM(s.amount),
COUNT(s.id), c.contact_name, c.tel
FROM sponsor as s
Left join contact c on (s.id = c.sponsor_id) and (c.is_primary = 1)
WHERE (c.sponsor_id is null)
GROUP BY sponsor_name, sub_name
试试这个。或者,如果不正常,则尝试编写sql,其中通过
null
MySql或sql Server?@FelixPamittan MySql检查以识别
SELECT s.sponsor_name, s.sub_name, SUM(s.amount),
COUNT(s.id), c.contact_name, c.tel
FROM sponsor as s
Left join contact c on (s.id = c.sponsor_id) and (c.is_primary = 1)
WHERE (c.sponsor_id is null)
GROUP BY sponsor_name, sub_name