Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 使用[权利]。。实践_Sql - Fatal编程技术网

Sql 使用[权利]。。实践

Sql 使用[权利]。。实践,sql,Sql,这个问题涉及: 我想知道在实践中是否有人写过或遇到过使用右连接的有用方法?如果是,情况是怎样的?我还没有真正了解自己(除了看到“查看此右连接”的示例之外),所以我想知道这是否实际用于实践中,如果是,上下文是什么?考虑一种情况,在这种情况下,我需要一个横向连接来获取列的join键(例如,因为值存储在数组中)。然后我想加入一个固定的代码列表,比如说计数它们。我可以这样写: select c.code, count(u.code) from codes c left join (t

这个问题涉及:



我想知道在实践中是否有人写过或遇到过使用
右连接的有用方法?如果是,情况是怎样的?我还没有真正了解自己(除了看到“查看此右连接”的示例之外),所以我想知道这是否实际用于实践中,如果是,上下文是什么?

考虑一种情况,在这种情况下,我需要一个横向连接来获取列的
join
键(例如,因为值存储在数组中)。然后我想加入一个固定的代码列表,比如说计数它们。我可以这样写:

select c.code, count(u.code)
from codes c left join
     (t cross join lateral
      unnest(codes) u(code)
     )
     on c.code = u.code;
或者通过使用
右连接

select c.code, count(u.code)
from t cross join lateral
     unnest(codes) u(code) right join
     codes c
     on c.code = u.code;
我仍然更喜欢
left join
版本,但有些人可能更喜欢在
from
子句中避免使用括号


如果在
from
子句中只有两个表,
left join
right join
可以互换;当有两个以上的表时,这并不总是正确的。我不确定字母表的阅读方向是否会影响人们喜欢的外部连接。我假设用户母语的基本语法可能会产生影响,可能是宾语先于主语的语言;然而,这样的语言是相当罕见的,也不在更常见的语言中。

实际上,
左连接和
右连接之间没有什么具体的不同做法,但是从句排列。回到SQL的定义中,它只是DBMS的order命令的语句安排


如果使用
RIGHT-JOIN
子句,数据将更倾向于RIGHT上的表(在JOIN子句之后提到),使用
LEFT-JOIN
会使
RIGHT-JOIN

的相反之处人们倾向于避免
RIGHT-JOIN
,因为它们在某种程度上是反直觉的(至少对于从左到右阅读的人来说是如此!)。但归根结底,这更多的是一个品味的问题,对我来说,这是一个基于观点的问题。@GMB。这不仅仅是品味的问题。SQL从左向右解析,
A左连接B左连接C
可能与
C右连接B右连接A
略有不同,具体取决于条件。另外,什么是
横向连接
?我以前从未见过——什么rdbms?@David542。横向联接是SQL标准的一部分,尽管语法不同(例如,SQL Server使用
交叉应用
)。Postgres、Oracle、SQL Server、MySQL的最新版本、PrestoDB和Snowflake(可能还有其他)都支持它们。这是官方的SQL标准吗?或者您是否可以链接到另一个包含SQL标准的站点?