2011-01-10 87 views
0

我有一个表格A连接了一个表格B,它给了我一个结果集。 我想加入一个表C到前一个,以限制结果集。但是如果这个连接没有结果,我希望得到与以前相同的结果集(不需要关心C)。仅当结果集> 0时才加入表格

你可以想办法在SQL中做到这一点?

+0

尝试使用“外部连接”的Google搜索。 – 2011-01-10 10:31:32

+0

你正在使用哪些DBMS? Oracle,PostgreSQL,SQL Server,MySQL,SQLite ......? – Benoit 2011-01-10 10:32:05

+0

OUTER JOIN的问题是我总是得到所有结果,并且加入这个新表的目标是限制结果集。 – Nans 2011-01-10 10:35:33

回答

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,所以你可以看到,如果结果是一个或另一个结果加入设置...

eg

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
SELECT * 
FROM TableA 
INNER JOIN TableB 
    ON TableA.ID = TableB.TableAID 
LEFT JOIN TableC 
    ON TableC.ID = TableB.TableCID 

这将返回从表一& B中的所有行,但只行从表C,其中关于标准匹配。

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

0

我看到一个问题LEFT/OUTER JOIN方法。如果你这样做,你可以得到一些在A和B但不在C中的结果。如果我理解得很好,那么porpouse就是把C和C结合起来,我的意思是当与C交叉时必须包含三个限制。所以@Cine解决方案适用于这种情况。