SQL 内连接和联合

SQL INNER JOIN and UNION

假设我有两个 tables Phone 和 Color

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

并且在颜色 table 上它包含 colorID, colorname

两个colorID与一个FK链接,但是一个Phone可能有一个空白的colorID

如果我想显示具有 PhoneID,make,colorname 的 table,即使它没有 colorID

所以我有这样的查询

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

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

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

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

而不是使用 INNER JOIN 你应该使用 LEFT JOIN.

左连接定义:"The LEFT JOIN keyword returns all rows from the left table (table1), with the matching rows in the right table (table2). The result is NULL in the right side when there is no match."

使用左连接

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

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

您想使用 LEFT JOIN

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

按照上面的建议,进行 Left Join 以获取所需的结果。 此外,如果您需要显示颜色名称而不是 colorID,请检查 SQL 函数 ISNULL(假设您使用的是 MS SQL 服务器)。 ISNULL 函数将允许您在 colorID 为空时设置默认值

所以像这样:

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