[英]Return multiple rows from multi SELECT subquery
詢問
SELECT
(SELECT NAME FROM product_component) AS pcNAME,
(SELECT PROJECT_NAME FROM jira_project) AS jpNAME,
(SELECT FILTER_NAME FROM jira_filter) AS jfNAME
每個SELECT都會返回不確定的行數。 我收到錯誤Subquery returns more than 1 row
。 我想要的輸出將是這樣的(快速草圖):
=======================================
| pcNAME | jpNAME | jfNAME |
=======================================
| data | data | data |
+------------+------------+-----------+
| data | data | data |
+------------+------------+-----------+
| data | data | data |
+------------+------------+-----------+
| | data | data |
+------------+------------+-----------+
| | data | data |
+------------+------------+-----------+
| | data | |
+------------+------------+-----------+
每一列可能會產生與其他列不同的行數。 因此,我將要根據最大值生成行數,然后清空其他未填充最大行數的行。
注意:這些表都沒有共享列,因此不能作為INNER JOIN
實現
關於如何實現的任何想法?
在MySQL中處理此問題的一種方法,用於變量, union all
和聚合:
SELECT MAX(NAME) as NAME, MAX(PROJECT_NAME) as PROJECT_NAME,
MAX(FILTER_NAME) as FILTER_NAME
FROM ((SELECT (@rnpc := @rnpc + 1) as rn, NAME, NULL as PROJECT_NAME, NULL as FILTER_NAME
FROM product_component CROSS JOIN
(SELECT @rnpc := 0) params
) UNION ALL
(SELECT (@rnpn := @rnpn + 1) as rn, NULL, PROJECT_NAME, NULL as FILTER_NAME
FROM jira_project CROSS JOIN
(SELECT @rnpn := 0) params
) UNION ALL
(SELECT (@rnf := @rnf + 1) as rn, NAME, NULL as PROJECT_NAME, NULL as FILTER_NAME
FROM jira_filter CROSS JOIN
(SELECT @rnf := 0) params
)
) t
GROUP BY rn
ORDER BY rn;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.