SQL INNER JOIN和UNION

时间:2015-03-16 20:20:17

标签: mysql sql join left-join

假设我有两个表Phone和Color

所以在Phone表中包含PhoneID,make,colorID

在颜色表上它包含colorID,colorname

两个colorID与FK链接,但手机可能有空白colorID

如果我想显示一个包含PhoneID的表,请使用colorname,即使它没有colorID

所以我有这样的查询

SELECT [PhoneID], [make], [colorID], FROM [Phone]

INNER JOIN [Color]
ON Phone.colorID = [color].[colorID];

但我希望它显示所有结果,即使它没有colorID,我希望它显示colorname而不是colorID。

我对如何做到这一点感到有点困惑 感谢

4 个答案:

答案 0 :(得分:4)

您应该使用INNER JOIN

,而不是使用LEFT JOIN

左连接定义:" LEFT JOIN关键字返回左表(table1)中的所有行,右表(table2)中的匹配行。当没有匹配时,结果在右侧为NULL。"

答案 1 :(得分:1)

使用

的左连接
SELECT [PhoneID], [make], [colorID], FROM [Phone]
Left JOIN [Color]
ON Phone.colorID = [color].[colorID];

就颜色名称而言,您必须使用颜色表加入并打印colorName而不是id。

答案 2 :(得分:1)

您想使用LEFT JOIN

SELECT [PhoneID], [make], [colorID], FROM [Phone]
    LEFT JOIN [Color]
        ON Phone.colorID = [color].[colorID];

答案 3 :(得分:1)

如上所述,请选择“左连接”以获取所需的结果。 此外,如果需要显示颜色名称而不是colorID,请检查SQL函数ISNULL(假设您使用的是MS SQL Server)。 当colorID为空时,ISNULL函数将允许您设置默认值

类似于:

select phoneID, make, ISNULL(colorID, 'your_default_value') FROM .....
LEFT JOIN ......