PARTY_ANIMALS
[ID,...] - >包含参加聚会的所有动物
DOGS
[ID,id_dog,name_dog] - >包含各自名称为
CATS
[ID,id_cat,name_cat] - >包含具有相应名称的猫的列表
我会执行一个查询,根据
中的某些值获取PART_ANIMALS并加入DOGS或CATPARTY_ANIMALS(然后执行条件连接)并返回以这种方式制作的结果表:
RESULT_TABLE [animal_type,id(id_dog或id_cat),name(name_dog或name_cat)]。
这样做的正确方法是什么? PARTY_ANIMALS表中需要哪些值才能与其他表正确连接?我需要什么样的查询才能获得结果表?
答案 0 :(得分:0)
试试这个:
SELECT d_c.animal_type,
d_c.id,
d_c.name
FROM party_animals a
INNER JOIN (SELECT 'dog' animal_type,
id id_a,
id_dog id,
name_dog name
FROM dogs
UNION ALL
SELECT 'cat' animal_type,
id id_a,
id_cat id,
name_cat name
FROM cats
) d_c ON a.id = d_c.id_a
答案 1 :(得分:0)
我建议使用left join
和coalesce()
:
select (case when id_cat is not null then 'Cat' else 'Dog' end) as animal_type,
coalesce(c.id_cat, d.id_dog) as id,
coalesce(c.name_cat, d.name_dog) as name
from party_animals pa left join
cats c
on pa.id = c.id_cat left join
dogs d
on pa.id = d.id_dog;
这将允许SQL引擎使用join
的索引。
此外,您需要非常小心,cats
和dogs
中的ID列具有不同的值。或者,至少在科学家们想出一种创造混合猫狗的方法之前。