[英]Combine Columns in SQL from Sub Queries on Tables that are not Directly Correlated
I have 4 Subqueries that I need to run as a unit and retrieve the distinct results in 1 list. 我有4个子查询,它们需要作为一个单元运行并在1个列表中检索不同的结果。 My java application will call this query with Spring Data JPA repository and it should return a List.
我的Java应用程序将使用Spring Data JPA存储库调用此查询,并且它应返回一个List。
## S_NAME based on TABLE_1.Id = 1
SELECT DISTINCT(S_NAME) FROM TABLE_1 WHERE S_ID = 1;
## I_NAME based on TABLE_1.Id = 1
SELECT DISTINCT(I_NAME) FROM I_TABLE WHERE I_ID
IN (SELECT I_ID FROM E_TABLE WHERE S_ID = 1);
## C_NAME based on TABLE_1.Id = 1
SELECT DISTINCT(C_NAME) FROM C_TABLE WHERE C_ID
IN (SELECT C_ID FROM C_TABLE WHERE E_ID
IN (SELECT E_ID FROM E_TABLE WHERE S_ID = 1));
## P_NAME based on TABLE_1.Id = 1
SELECT DISTINCT(P_NAME) FROM P_TABLE WHERE C_ID
IN (SELECT C_ID FROM C_TABLE WHERE E_ID
IN (SELECT E_ID FROM E_TABLE WHERE S_ID = 1));
The columns S_NAME, I_NAME, C_NAME, and P_NAME contain the same data. 列S_NAME,I_NAME,C_NAME和P_NAME包含相同的数据。 Simply different names so we know the source of that data.
只是名称不同,因此我们知道该数据的来源。 However, for this query I need distinct results from all these columns in 1 column.
但是,对于此查询,我需要1列中所有这些列的不同结果。
Can this be done easily without making a stored procedure? 无需执行存储过程就可以轻松完成此操作吗? I would, but I don't have the authorization for such things.
可以,但是我没有获得此类授权。 Same constaint on making a view.
同样的观点。
You can use union all
to get the value in rows or put them in separate columns. 您可以使用
union all
来获取行中的值或将其放在单独的列中。 Here is one way: 这是一种方法:
SELECT (SELECT DISTINCT(S_NAME) FROM TABLE_1 WHERE S_ID = 1
) as val1,
(SELECT DISTINCT(I_NAME) FROM I_TABLE WHERE I_ID IN (SELECT I_ID FROM E_TABLE WHERE S_ID = 1
) as val2,
(SELECT DISTINCT(C_NAME) FROM C_TABLE
WHERE C_ID IN (SELECT C_ID FROM C_TABLE WHERE E_ID IN (SELECT E_ID FROM E_TABLE WHERE S_ID = 1))
) as val3,
(SELECT DISTINCT(P_NAME) FROM P_TABLE
WHERE C_ID IN (SELECT C_ID FROM C_TABLE WHERE E_ID IN (SELECT E_ID FROM E_TABLE WHERE S_ID = 1))
) as val4;
Although the queries are similar, I am not sure if it is worth trying to combine them. 尽管查询相似,但我不确定是否值得尝试将它们组合在一起。
Use UNION
, which implies DISTINCT
so you don't need to say that: 使用
UNION
,这意味着DISTINCT
因此您无需这么说:
SELECT S_NAME FROM TABLE_1 WHERE S_ID = 1
UNION
SELECT I_NAME FROM I_TABLE WHERE I_ID IN (
SELECT I_ID FROM E_TABLE WHERE S_ID = 1)
UNION
SELECT C_NAME FROM C_TABLE WHERE C_ID IN (
SELECT C_ID FROM C_TABLE WHERE E_ID IN (
SELECT E_ID FROM E_TABLE WHERE S_ID = 1))
UNION
SELECT P_NAME FROM P_TABLE WHERE C_ID IN (
SELECT C_ID FROM C_TABLE WHERE E_ID IN (
SELECT E_ID FROM E_TABLE WHERE S_ID = 1))
;
FYI: The third query is double-reading C_TABLE
, which is a waste. 仅供参考:第三个查询是重复读取
C_TABLE
,这很浪费。 I left it alone, assuming it's a simple mistake setting up the example. 假设设置示例是一个简单的错误,我就不理会它了。
SELECT (S_NAME) FROM TABLE_1 WHERE S_ID = 1;
UNION
SELECT (I_NAME) FROM I_TABLE WHERE I_ID
IN (SELECT I_ID FROM E_TABLE WHERE S_ID = 1);
UNION
SELECT (C_NAME) FROM C_TABLE WHERE C_ID
IN (SELECT C_ID FROM C_TABLE WHERE E_ID
IN (SELECT E_ID FROM E_TABLE WHERE S_ID = 1));
-- HERE UNION will only Take DISTINCT row from the each query no need of Distinct
UNION
SELECT (P_NAME) FROM P_TABLE WHERE C_ID
IN (SELECT C_ID FROM C_TABLE WHERE E_ID
IN (SELECT E_ID FROM E_TABLE WHERE S_ID = 1));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.