Mysql 连接SQL中的两个表并返回包含空值的结果集
我有投票网站,每个网站都是表格中的一行。现在在我的web服务器上,我需要加载所有站点,并检查每个站点是否已投票(投票表示站点id存在于其他表的行中) 因此,如果站点id=5且Mysql 连接SQL中的两个表并返回包含空值的结果集,mysql,sql,sql-server,Mysql,Sql,Sql Server,我有投票网站,每个网站都是表格中的一行。现在在我的web服务器上,我需要加载所有站点,并检查每个站点是否已投票(投票表示站点id存在于其他表的行中) 因此,如果站点id=5且callback\u voces中存在具有站点id5的行,则查询将该id添加到“已投票的”,否则该id将为空 示例: SELECT sites.*, callback_votes.site_id AS voted FROM sites INNER JOIN callback_votes ON callback_votes.
callback\u voces
中存在具有站点id
5的行,则查询将该id添加到“已投票的”
,否则该id将为空
示例:
SELECT sites.*, callback_votes.site_id AS voted
FROM sites
INNER JOIN callback_votes ON callback_votes.site_id = sites.id;
但是,如果我在回调投票
中没有任何行,该查询将不会返回任何数据。我想做的是,我仍然希望返回站点。*
,在这种情况下,投票
为空
这是可能的还是有其他方法?只需使用左连接而不是内部连接,即可从站点获取所有数据,如果不在回调投票中,则为空值
SELECT sites.*, callback_votes.site_id AS voted
FROM sites
LEFT JOIN callback_votes ON callback_votes.site_id = sites.id;
尝试左连接
选择站点。*,回调\u投票。站点\u投票id,
当ISNULL(回调\u投票。站点\u id,“”)为“”时,则为“否”,否则为“是”,结尾为\u站点\u投票
从站点左侧加入callback\u voces上的callback\u voces.site\u id=sites.id
案例适用于SQL Server,如果用于MYSQL,则可以使用。您使用的是
内部联接
,它将返回每个表中有匹配行的行,您需要的是左联接
使用LEFT JOIN
的简单术语意味着“从左表中选择所有行,其中右表中没有匹配行,然后返回null”
以下是您的查询的外观:
SELECT sites.*, callback_votes.site_id AS voted
FROM sites
LEFT JOIN callback_votes ON callback_votes.site_id = sites.id;
可能重复的