Mysql 如何编写SQL查询以返回具有空字段的行?

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

我想编写一个查询,输出所有行,包括其中有空字段的行。但是我的查询只输出包含所有非空字段的行

这就是我的意思

这些是我的桌子 表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) 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