条件连接表结构

时间:2014-10-27 13:16:00

标签: mysql sql join left-join

我有三张这样的桌子:

  1. PARTY_ANIMALS [ID,...] - >包含参加聚会的所有动物

  2. DOGS [ID,id_dog,name_dog] - >包含各自名称为

  3. 的狗列表
  4. CATS [ID,id_cat,name_cat] - >包含具有相应名称的猫的列表

  5. 我会执行一个查询,根据

    中的某些值获取PART_ANIMALS并加入DOGS或CAT

    PARTY_ANIMALS(然后执行条件连接)并返回以这种方式制作的结果表:

    RESULT_TABLE [animal_type,id(id_dog或id_cat),name(name_dog或name_cat)]。

    这样做的正确方法是什么? PARTY_ANIMALS表中需要哪些值才能与其他表正确连接?我需要什么样的查询才能获得结果表?

2 个答案:

答案 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 joincoalesce()

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的索引。

此外,您需要非常小心,catsdogs中的ID列具有不同的值。或者,至少在科学家们想出一种创造混合猫狗的方法之前。