我有一个表格A连接了一个表格B,它给了我一个结果集。 我想加入一个表C到前一个,以限制结果集。但是如果这个连接没有结果,我希望得到与以前相同的结果集(不需要关心C)。仅当结果集> 0时才加入表格
你可以想办法在SQL中做到这一点?
我有一个表格A连接了一个表格B,它给了我一个结果集。 我想加入一个表C到前一个,以限制结果集。但是如果这个连接没有结果,我希望得到与以前相同的结果集(不需要关心C)。仅当结果集> 0时才加入表格
你可以想办法在SQL中做到这一点?
由于涉及逻辑,因此不可能使用常规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;
但这当然假设你能够改变读取结果的代码路径。
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.但是,这种方法需要提供程序专用
我看到一个问题LEFT/OUTER JOIN方法。如果你这样做,你可以得到一些在A和B但不在C中的结果。如果我理解得很好,那么porpouse就是把C和C结合起来,我的意思是当与C交叉时必须包含三个限制。所以@Cine解决方案适用于这种情况。
尝试使用“外部连接”的Google搜索。 – 2011-01-10 10:31:32
你正在使用哪些DBMS? Oracle,PostgreSQL,SQL Server,MySQL,SQLite ......? – Benoit 2011-01-10 10:32:05
OUTER JOIN的问题是我总是得到所有结果,并且加入这个新表的目标是限制结果集。 – Nans 2011-01-10 10:35:33