我正在加入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行。 任何帮助将不胜感激。
答案 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语句中过滤所需的列)。