即使Select为空,也返回结果

时间:2014-08-12 17:52:52

标签: mysql sql database select join

我有这个问题:

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的值为空。

5 个答案:

答案 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