我有这个问题:
SELECT p.id, p.name, p.img, p.template_usage, t.name as tpl_name FROM platforms as p, xml_template as t WHERE p.template_usage = t.id
它返回所需的结果,但是如果t.id不存在,则不返回整行。是否可以添加某种参数
"If t.id does not exist then tpl_name = ''"
- 因此返回行,但tpl_name的值为空。
答案 0 :(得分:4)
SELECT p.id, p.name, p.img, p.template_usage, t.name as tpl_name
FROM platforms as p
left join xml_template as t on t.id = p.template_usage
答案 1 :(得分:3)
您的问题源于您在查询中使用隐式内部联接的事实。使用左连接更适合您的情况。
SELECT p.id, p.name, p.img, p.template_usage, t.name as tpl_name
FROM platforms as p
LEFT JOIN xml_template as t ON p.template_usage = t.id
我建议阅读Explicit vs implicit SQL joins以及查找每个SQL连接完成的内容。 SQL joins http://www.geekphilip.com/wp-content/uploads/2012/04/Join-Diagram.png
注意:正如John在下面提到的,MySQL不支持FULL OUTER JOIN。
使用某些连接时,DBMS之间可能存在怪癖,但我建议知道每种连接类型试图完成的内容。一旦你知道如何加入表格,你就需要查看如何在你的特定数据库中完成它。
答案 2 :(得分:0)
使用左连接。
select p.id, p.name, p.img, p.template_uage, t.name as tpl_name from platforms p left outer join xml_template t on p.template_uage=t.id;
左外连接返回左表中的所有行,无论右表中是否存在匹配。右表中与连接条件不匹配的相应列显示为空。
答案 3 :(得分:0)
就像旁注一样..使用LEFT JOIN
来组合表是否匹配...使用COALESCE()
来表示左连接的空值..你可以指定任何东西你想要出现..在这种情况下,我只是添加了一个空格
SELECT
p.id,
p.name,
p.img,
p.template_usage,
COALESCE(t.name, ' ') AS tpl_name
FROM platforms as p
LEFT JOIN xml_template as t
ON t.id = p.template_usage
答案 4 :(得分:0)
看起来像是外部联接的作业
类似
SELECT p.id, p.name, p.img, p.template_usage, t.name as tpl_name
FROM platforms as p RIGHT OUTER JOIN xml_template as t
ON p.template_usage = t.id