Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.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 从两个查询返回一对值,而不是一个值_Sql - Fatal编程技术网

Sql 从两个查询返回一对值,而不是一个值

Sql 从两个查询返回一对值,而不是一个值,sql,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,

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

// 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]


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

我想这样就可以了

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'

我想这样就可以了

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'

由于您的问题不清楚,所以我假设您需要在一行或不同行中使用上述查询的ID,您可以使用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;

由于您的问题不清楚,因此我假设您需要一行或不同行中所述查询的ID,您可以使用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;

您可以运行以下查询,这对我来说很好:

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

您可以运行以下查询,这对我来说很好:

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

您可以将第二个查询与第一个查询连接起来,如下所示,以便在一个查询中获得两个A.id、C.id值

从中选择A.ID、C.ID 从表A中选择A.ID作为内部联接 A.ID=B.ID上的表,其中B.STATUS='A'A 内部联接表
在C.ID=A.ID上,其中C.STATUS='A'

您可以将第二个查询与第一个查询连接起来,如下所示,以便在一个查询中获得两个A.id、C.id值

从中选择A.ID、C.ID 从表A中选择A.ID作为内部联接 A.ID=B.ID上的表,其中B.STATUS='A'A 内部联接表
在C.ID=A.ID上,其中C.STATUS='A'

是否将此2查询作为子查询?它们之间有关系吗?请指定当前的结果,以及它们的组合。@Lee问题是它们根本没有连接,就像不同的表一样on@user1432980.. 因为如果每个表的结果不止一个。。将它们连接在一起后,可能会使记录计数加倍。请提供当前输出的示例。现在解释一下如何组合测试结果。如果这两个查询产生的行数不同,会发生什么情况?将这两个查询作为子查询?它们之间有关系吗?请指定当前的结果,以及它们的组合。@Lee问题是它们根本没有连接,就像不同的表一样on@user1432980.. 因为如果每个表的结果不止一个。。将它们连接在一起后,可能会使记录计数加倍。请提供当前输出的示例。现在解释一下如何组合测试结果。如果这两个查询产生的行数不同,会发生什么情况?