【发布时间】:2016-10-22 03:06:01
【问题描述】:
我有三个表(a、b、c)和两个(b 和 c)需要连接才能从第一个表 a 中获取详细数据。但问题是我需要在一个查询中执行此操作。
如果我在同一个查询中加入两个表,则找不到任何记录,因为详细数据在 b 或 c 中,但从不在两者中。
为了进一步复杂化,我需要根据找到的记录进一步加入其他表(b2,c2)来自 b 或 c。
我正在使用 MS SQL。
我现在的查询是:
select a.*, b.name1, c.name1, b2.url, c2.url
left join b on a.aID = b.aID
left join c on a.aID = c.aID
inner join b2 on b.bID = b2.bID
inner join c2 on c.cID = c2.cID
where a.date > '9/1/2016'
我搜索了几天,但似乎没有人需要查询查询中的第四和第五张表,因此找不到任何类似的答案
有没有办法做到这一点?性能不是问题,因为在执行将始终限制表 a 记录的 where 子句后,记录数将少于 1,000。
【问题讨论】:
-
JOIN只是INNER JOIN的简写,因此重要的是要意识到您只是在执行 4 个内部连接。INNER JOIN仅抓取找到匹配项的记录。如果您想从一个表中选择所有值,然后在适用的情况下找到其他信息,您应该考虑改为使用LEFT JOIN。 -
我更新了代码以使用 LEFT JOIN,但查询仍然无法从 b2 和 c2 表中提取数据。实际上根本找不到任何记录。
标签: sql sql-server join