我有一个 SQL 语句,其中有一个对我来说无法解释的奇怪行为。 也许你可以找到问题所在:
当我使用该语句时
select count(*) from department
我得到了 2755 个结果
使用以下语句
select
building1.street, building1.streetno, building1.plz, building1.city, dept1.buildingid
from
department dept1
left join
supporter sup
on
dept.supporterid = sup.id
left join
building building1
on
sup.buildingid = building1.ibuildingid
where
dept.usepostaladresssupporter = 1
union all
select
building2.street, building2.streetno, building2.plz, building2.city, dept2.buildingid
from
building building2
right join
tueks_department dept2
on
dept2.buildingid = building2.ibuildingid
where
dept2.usepostaladresssupporter = 0
我也得到了 2755 个结果。 但是当我想用左连接组合这两个语句时:
select count(*) from department
left join
(
select
building1.street, building1.streetno, building1.plz, building1.city, dept1.buildingid
from
department dept1
left join
supporter sup
on
dept.supporterid = sup.id
left join
building building1
on
sup.buildingid = building1.ibuildingid
where
dept.usepostaladresssupporter = 1
union all
select
building2.street, building2.streetno, building2.plz, building2.city, dept2.buildingid
from
building building2
right join
tueks_department dept2
on
dept2.buildingid = building2.ibuildingid
where
dept2.usepostaladresssupporter = 0
) postadress
on
department.buildingid = postadress.buildingid;
我得到了 3648513 个结果。
我的预期是,我只得到 2755 个结果。 哪里错了?
感谢您的帮助!
最佳答案
我假设 buildingid
不是唯一的(根据我的推理,它不可能是唯一的)
想象一下下面的简单表格
表A
create TableA (name VARCHAR(32));
insert into TableA values ('Lieven');
insert into TableA values ('Lieven');
表B
create TableB (name VARCHAR(32));
insert into TableB values ('Lieven');
insert into TableB values ('Lieven');
insert into TableB values ('AnyOtherValue');
选择语句
select * from TableA a left outer join TableB b on a.name = b.name
由于TableA
的每条记录与TableB
的每条记录相匹配,其中name
相等,这将导致 4 条记录(AnyOtherValue 由于不匹配而被忽略)
TableA
的第一条记录与“TableB”的三个记录中的两个一起返回TableA
的第二条记录与“TableB”的三个记录中的两个一起返回
关于sql - Oracle 语句计数不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14503065/