1

询问

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

关于如何实现这一点的任何想法?

4

1 回答 1

4

在 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;
于 2015-11-12T13:20:36.323 回答