在SQL中连接两个表并返回包含空值的结果集

时间:2014-05-30 13:48:29

标签: mysql sql sql-server

我有投票网站,其中每个网站都是表格中的一行。现在在我的网络服务器上,我需要加载所有网站,并检查每个网站是否已经投票(投票意味着网站ID存在于其他表格的行中)。

因此,如果site_id中存在网站ID = 5和callback_votes 5行,则查询会将该ID添加到'voted',否则将为空。

示例:

SELECT sites.*, callback_votes.site_id AS voted
FROM sites 
INNER JOIN callback_votes ON callback_votes.site_id = sites.id;

此查询有效,但是,如果callback_votes中没有任何行,则查询将不返回任何数据。我想做什么,我仍然想要返回sites.*,只是因为voted在这种情况下为空。

这可能还是有其他办法吗?

3 个答案:

答案 0 :(得分:2)

您正在使用INNER JOIN,它将返回每个表中存在匹配行的行,您需要的是LEFT JOIN

在简单术语中使用LEFT JOIN意味着"从左表中选择所有行,右表中没有匹配的行然后返回null"。

以下是您的查询的外观:

SELECT sites.*, callback_votes.site_id AS voted
FROM sites 
LEFT JOIN callback_votes ON callback_votes.site_id = sites.id;

答案 1 :(得分:0)

只使用left join而不是inner来获取来自站点的所有数据,如果不是回调投票则使用null值

SELECT sites.*, callback_votes.site_id AS voted
    FROM sites 
    LEFT JOIN callback_votes ON callback_votes.site_id = sites.id;

答案 2 :(得分:0)

尝试LEFT JOIN

SELECT sites。*,callback_votes.site_id AS voteed,
ISNULL时的情况(callback_votes.site_id,'')=''然后没有' ELSE'是'结束IS_SITE_VOTED
FROM sites LEFT JOIN callback_votes ON callback_votes.site_id = sites.id;


CASE适用于SQL-Server,您可以将IF用于MYSQL。