我有一个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
答案 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