Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.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 有没有办法简化我的代码?左连接多个select语句_Sql_Oracle - Fatal编程技术网

Sql 有没有办法简化我的代码?左连接多个select语句

Sql 有没有办法简化我的代码?左连接多个select语句,sql,oracle,Sql,Oracle,我找到了一种方法,将6个不同的select语句组合成一个很长的行,我可以使用select语句从中过滤数据。它就像我需要它一样工作,但是我觉得我有大量的冗余代码。有没有什么方法可以在不改变功能的情况下简化我的代码 SELECT * FROM ( SELECT row1 FROM db1 JOIN db2 ON ... JOIN db3 ON ... WHERE ...) t1 LEFT JOIN ( SELECT value_to_join FROM db4 v1, db1 JOIN db2

我找到了一种方法,将6个不同的select语句组合成一个很长的行,我可以使用select语句从中过滤数据。它就像我需要它一样工作,但是我觉得我有大量的冗余代码。有没有什么方法可以在不改变功能的情况下简化我的代码

SELECT * FROM
(
SELECT row1 FROM db1 
JOIN db2 ON ...
JOIN db3 ON ...
WHERE ...) t1

LEFT JOIN
(
SELECT value_to_join FROM db4 v1, db1
JOIN db2 ON ...
JOIN db3 ON ...
WHERE ...) t2
ON t1.other_value = t2.other_value

LEFT JOIN
(
SELECT value_to_join FROM db4 v2, db1
JOIN db2 ON ...
JOIN db3 ON ...
WHERE ...) t3
ON t1.other_value = t3.other_value
我的输出是第一个select语句中的一行,它与来自db4的5个不同值连接在一起。当我连接其他表(db2,db3)时,这5个值只能与db1连接,因为没有公共列可以连接

更多信息:此格式的
左连接
一直使用到
t6
,ON分别为
t1.value=tn.value
,n分别增加。每个子查询中的join语句在所有6个子查询中都是相同的,因此我假设必须有一种方法来简化它。“…”只是每个子句后面的一堆代码。

如果您的RDBMS支持不太旧的SQL版本(SQL 3/SQL:1999),您可以使用CTE来实现这一点:

WITH myquery (value,…) AS (
  SELECT * FROM db4, db1
  JOIN db2 ON ...
  JOIN db3 ON ...
  WHERE ...)

SELECT * FROM
(
  SELECT * FROM db1 
  JOIN db2 ON ...
  JOIN db3 ON ...
  WHERE ...) t1

LEFT JOIN myquery t2
ON t1.value = t2.value

LEFT JOIN myquery t3
ON t1.value = t3.value

…

但是,您需要将第一次查询中的“
value、
”和“SELECT
*
”替换为所需列的确切列表。

最好将代码简化为核心问题。但是你减少的太多了。很难说你需要什么。示例数据可能会有所帮助。@juergend增加了一点,我唯一真正需要的是一种重新格式化的方法,使其更易于阅读/编辑,因为我现在所做的只是重复的代码块,有一些小的更改。您能提供示例输入数据和预期结果吗?这很奇怪,很可能你不必这么做,但从你提供的信息来看,很难判断总体目标是什么。