【发布时间】:2010-11-11 15:58:21
【问题描述】:
我在从外部联接工作的情况转移到失败的情况时遇到问题。
工作(伪代码示例)
SELECT a.number, a.name, b.ref, c.ref, c.firmref
FROM jobs a, teams b LEFT OUTER JOIN teamfirms c ON b.ref = c.team
WHERE a.ref = b.job
工作和团队之间存在多对一的关系(每个工作多个团队),总是填充
表 c 中可能有也可能没有公司,但上面的查询给出了我期望的结果(大约 5000 条记录)
当我想从第四张桌子中引入有关团队的详细信息时,问题就来了
我正在尝试的代码如下
SELECT a.number, a.name, b.ref, c.ref, c.firmref, d.name
FROM jobs a, teams b LEFT OUTER JOIN teamfirms c ON b.ref = c.team, firms d
WHERE a.ref = b.job
AND d.ref = c.firmref
此时我试图捕获的 NULLS 消失了,我丢弃了大约 500 条记录
我做错了什么?
【问题讨论】:
-
你永远不应该使用隐式连接。这是一种糟糕的做法,当您需要添加左连接时,会导致意外交叉连接问题和维护问题。并且混合隐式和显式连接是导致错误结果的处方。
标签: sql outer-join