暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 类似 (1 = 1) 的连接

askTom 2018-11-11
232

问题描述

大家好,很抱歉,这很基本,但这让我有些着迷。我看到写了一个加入

像 (1 = 1) 上的内部连接表B

为什么这样的加入应该写和在什么情况下。提前感谢。

专家解答

联接返回第一个表中的行,该表链接到第二个联接条件为true的每一行。

1 = 1始终为真。

因此,这将返回连接到其他行的每一行。又名交叉连接:

create table t1 (
  c1 int
);
create table t2 (
  c1 int
);

insert into t1 values ( 1 );
insert into t1 values ( 2 );

insert into t2 values ( 1 );
insert into t2 values ( 2 );

select * 
from   t1
join   t2
on     ( 1 = 1 );

C1   C1   
   1    1 
   1    2 
   2    1 
   2    2


我想不出这样做的充分理由 *。如果意图是交叉连接,那么你应该写:

select * 
from   t1
cross join t2;

C1   C1   
   1    1 
   1    2 
   2    1 
   2    2 


* 这可能是动态SQL的一部分。在构造联接和where子句时,从基本的,始终为真实的条件开始很方便。这使得更容易在额外的谓词上进行定位。无需整理位置/on/和开始:

stmt := 'select * from t1 join t2 on 1=1 ';

if ... then
  stmt := stmt || ' and  ';
end if;

if ... then
  stmt := stmt || ' and  ';
end if;


虽然连接标准通常是固定的。所以这在你的连接子句中很有用。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论