当fk为null时如何显示空值

时间:2017-06-13 17:26:02

标签: mysql null

我有一个MySQL表,有两个fk引用另一个表

type1不能为null,但type2可以为。两者都是fk到 M_TYPE

Katachi
*Id         int
name        varchar(40)
-type1      int
-type2      int

M_TYPE
*Id         int 
type_name   varchar(40)

我查询显示 katachi 表,但我希望它显示 type_name

而不是类型编号
select 
    k.name, 
    t1.type_name as type1, 
    t2.type_name as type2
from katachi k, m_type t1, m_type t2
where k.type1=t1.id and k.type2=t2.id;

它显示katachi有两种类型,但是当涉及到一种类型的katachi而第二种为null时它会忽略它。

所以我把代码更改为

select 
    k.name, 
    t1.type_name as type1, 
    t2.type_name as type2
from katachi k, m_type t1, m_type t2
where k.type1=t1.id and (k.type2=t2.id or k.type2 is null);

现在说到katachi有两种类型它会显示m_type表中的每个元素,我希望它只显示null

1 个答案:

答案 0 :(得分:0)

使用UNION两个查询,一个用于填写两个FK的情况,另一个用于一个FK的情况。

SELECT k.name, t1.type_name AS type1, t2.type_name AS t2
FROM katachi AS k
JOIN m_type AS t1 ON k.type1 = t1.id
JOIN m_type AS t2 ON k.type2 = t2.id
UNION ALL
SELECT k.name, t.type_name AS type1, NULL AS type2
FROM katachi AS k
JOIN m_type AS t ON k.type1 = t.id
WHERE k.type2 IS NULL