我有三张桌子。
1)动物
id |类型| animal_id
2) Land_Animal
animal_id |名称
3) Air_Animal
animal_id |名称
type = (0 , land_Animal ; 1 , air_Animal )
我想继续...... ...
select * from Animal anm
if type = 0 then inner join Land_Animal land on anm.animal_id = land.animal_id
else inner join Air_Animal air on anm.animal_id = air.animal_id
以上代码是我想要的样本。我想动态加入另一个表取决于主表的列值。如果 type = 0 ,我只想加入 Land_Animal 表,如果 type = 1 我只想加入 Air_Animal 表。我怎样才能实现它?不建议编辑我的表结构。正如我所描述的那样“ ......上面的代码是我的问题的样本。”
提前致谢,我非常感谢您的建议。
答案 0 :(得分:2)
使用以下查询
SELECT *
FROM animal a
INNER JOIN land_animal l
ON l.animal_id = a.animal_id
WHERE a. type = 0
UNION
SELECT *
FROM animal a
INNER JOIN air_animal ai
ON ai.animal_id = a.animal_id
WHERE a.type = 1
答案 1 :(得分:2)
你可以用JOIN
这样做
SELECT m.*, COALESCE(l.name, a.name) name
FROM animal m LEFT JOIN land_animal l
ON m.type = 0
AND m.animal_id = l.animal_id LEFT JOIN air_animal a
ON m.type = 1
AND m.animal_id = a.animal_id
或
SELECT m.*, q.name
FROM animal m JOIN
(
SELECT 0 type, animal_id, name
FROM land_animal
UNION ALL
SELECT 1 type, animal_id, name
FROM air_animal
) q
ON m.type = q.type
AND m.animal_id = q.animal_id
示例输出:
| ID | TYPE | ANIMAL_ID | NAME | |----|------|-----------|-------| | 1 | 0 | 1 | horse | | 2 | 1 | 1 | owl |
这是 SQLFiddle 演示