SQL将2个表连接到1个表

时间:2012-05-24 22:35:55

标签: mysql

我正在加入3个表: 任务,单位和建筑。

任务表有一个单元的列和一个建筑物的列 任何单个任务仅分配给建筑物或单元,而不是两者。 因此,每条记录中的一列始终为空。任务表中有6100条记录。

当我使用此JOIN时:

select * from task t
join building b on b.id = t.building_id;

我得到了628行。这是正确的建筑任务总数。

当我使用此JOIN时

select * from active_task at
inner join unit_template ut on ut.id = at.unit_template_id

我得到了5472行。这是正确的单元任务数。 如果我将它们添加到5472 + 628 = 6100,这是任务表中正确的行数。

当我运行此查询时:

select * from task t
inner join unit ut on ut.id = t.unit_id
inner join building bt on bt.id = t.building_id

我得零行。我需要我的查询来检索6100行。 任何帮助将不胜感激。

basic ER

3 个答案:

答案 0 :(得分:2)

SELECT  *
FROM    task t
LEFT JOIN
        unit ut
ON      ut.id = t.unit_id
LEFT JOIN
        building bt
ON      bt.id = t.building_id
        AND t.unit_id IS NULL

答案 1 :(得分:1)

尝试左连接:

select * from task t
left join unit ut on ut.id = t.unit_id
left join building bt on bt.id = t.building_id

答案 2 :(得分:1)

如果你想要两个查询给出的所有匹配,为什么不统一:

SELECT * from task t JOIN building b ON b.id = t.building_id
UNION
SELECT * from active_task at JOIN unit_template ut ON ut.id = at.unit_template_id

只要两个任务表具有相同数量的字段就足够了(否则在select语句中过滤所需的列)。