仅在结果集>时加入表格。 0

时间:2011-01-10 10:29:43

标签: sql join

我有一个表A与表B连接,它给了我一个结果集。 我想将表C加入到前面的表中以限制结果集。但是如果这个连接没有结果,我想拥有与以前相同的结果集(不用处理C)。

你能想到在SQL中这样做吗?

3 个答案:

答案 0 :(得分:2)

SELECT *
FROM TableA
INNER JOIN TableB
    ON TableA.ID = TableB.TableAID
LEFT JOIN TableC
    ON TableC.ID = TableB.TableCID

这将返回表A和表A中的所有行。 B但只有TableC中与ON标准匹配的行。

否则条件连接并不真正适用于标准SQL。如果您使用的是SQL Server,则可以执行一些存储过程逻辑来检查TableC的结果,如果没有,则只从表A和表中获取数据。 B.但这种方法是提供者特定的

答案 1 :(得分:1)

常规SQL不可能,因为它涉及逻辑。

最好的办法是制作一个小脚本,例如: (伪代码)

select * into #tmp from x inner join y inner join z where blabla;
if (exists (select * from #tmp))
BEGIN
  select * from #tmp
END
else
BEGIN
   select * from x inner join y where blabla;
END

编辑:

但如果我是你,我会一直使用LEFT JOIN加入C,这样你就可以看到结果是在一个还是另一个结果集中......

e.g。

select x.*, y.*, case when z.id is null then 0 else 1 end from x inner join y left join z on blabla where blabla;

但这当然假设您能够改变读取结果的代码路径。

答案 2 :(得分:0)

我在LEFT / OUTER JOIN方法中看到了一个问题。如果你这样做,你可以获得A和B中的一些结果,但不能在C中。如果我理解的是porpouse与C一起加入AB,我的意思是当与C交叉时的结果必须包括三个限制。所以@Cine解决方案适合这种情况。