返回值对,而不是两个查询中的一个值

时间:2017-11-28 09:04:30

标签: sql

我有两个返回单个结果的查询。 他们看起来像这样

// query 1
SELECT A.id FROM tableA A
    INNER JOIN tableB B
        ON B.id = A.id
WHERE b.status = 'ACTIVE'   

// query 2
SELECT C.id FROM tableC C
WHERE c.status = 'ACTIVE'     

如何组合它们并返回一对值而不是来自不同查询的一个值?我的意思是得到像[A.id, C.id]

这样的东西

目前我必须在应用程序中使用两个查询,我想将它们合并为一个。

4 个答案:

答案 0 :(得分:2)

我认为这样做会

SELECT (SELECT A.id FROM tableA A
         INNER JOIN tableB B
         ON B.id = A.id
         WHERE b.status = 'ACTIVE'   
       ) as 'query1',
       (
         SELECT C.id FROM tableC C
         WHERE c.status = 'ACTIVE'
       ) as 'query2'

答案 1 :(得分:1)

由于您的问题不明确,所以我假设您需要在一行或不同行中提到查询ids,您可以使用union all/union(假设数据类型兼容或可隐式转换)和重复或允许或不允许)如下。

将结果合并到不同的行中。

SELECT A.id 
FROM tableA A
INNER JOIN tableB B
ON B.id = A.id
WHERE b.status = 'ACTIVE'   

union all

SELECT C.id 
FROM tableC C
WHERE c.status = 'ACTIVE' 

在单行中合并结果。

select max(id1), max(id2)
from(
    SELECT A.id as id1, NULL as id2
    FROM tableA A
    INNER JOIN tableB B
    ON B.id = A.id
    WHERE b.status = 'ACTIVE'   

    union all

    SELECT NULL, C.id 
    FROM tableC C
    WHERE c.status = 'ACTIVE' 
    ) t;

SAMPLE DEMO

答案 2 :(得分:0)

您可以运行以下查询,对我来说没问题:

select t1.id as aid ,t2.id as cid
from (
       SELECT A.id 
       FROM tableA A
       INNER JOIN tableB B ON B.id = A.id
       WHERE b.status = 'ACTIVE'
     ) t1 
full outer join (
      SELECT C.id 
      FROM tableC C
      WHERE c.status = 'ACTIVE'
) t2  on t1.id=t2.id

答案 3 :(得分:0)

您可以使用第一个查询加入第二个查询,如下所示,这样您就可以在一个查询中获得两个(A.id,C.id)值...

SELECT A.ID,C.ID FROM (SELECT A.ID FROM table_A A INNER JOIN table_B B ON A.ID=B.ID WHERE B.STATUS='A')A INNER JOIN table_c C ON C.ID=A.ID WHERE C.STATUS='A';