2

我的任务是加入 3 个表:Task、Unit 和 Building。

任务表有一个单元列和一个建筑物列。
任何单个任务都只分配给一个建筑物或一个单元,绝不会同时分配给两者。因此,每条记录中的一列始终为空。任务表中有 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 行。任何帮助,将不胜感激。

基础ER

4

3 回答 3

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
于 2012-05-24T22:39:14.143 回答
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
于 2012-05-24T22:39:30.930 回答
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

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

于 2012-05-24T22:46:53.097 回答