如何在嵌套的SELECT中存储结果行计数?

时间:2009-05-23 12:49:37

标签: mysql

我有一个MySQL查询,我有一个嵌套的SELECT,它将一个数组返回给父:

SELECT ...
FROM ...
WHERE ... IN (SELECT .... etc)

我想从嵌套的SELECT中存储返回结果的数量(行数),但是执行类似IN(SELECT count(...),columnA)的操作不起作用,因为IN只需要一个结果。

有没有办法存储返回的结果计数以供以后在父语句中使用?

3 个答案:

答案 0 :(得分:0)

您可能必须将嵌套语句的结果选择到临时表中。然后你可以在以后进行IN和计数。我对MS-SQL比较熟悉,但我认为你应该能够这样做:

CREATE TEMPORARY TABLE tmp_table AS
SELECT something
FROM your_table;

SELECT ...
FROM ...
WHERE ... IN (SELECT * FROM tmp_table);

SELECT count(*) FROM tmp_table;

如果这不起作用,您可能必须像使用普通的“CREATE TABLE”一样提供临时表创建语句的完整详细信息。请参阅MySQL手册中的here和类似示例中的here

CREATE TEMPORARY TABLE tmp_table
(
    tableid INT,
    somedata VARCHAR(50)
);

INSERT INTO tmp_table
SELECT ...
FROM ...

SELECT ...
FROM ...
WHERE ... IN (SELECT * FROM tmp_table);

SELECT count(*) FROM tmp_table;

答案 1 :(得分:0)

您在评论中提到您的查询如下所示:

SELECT
  tabA.colA,
  tabA.colB
FROM tabA
WHERE tabA.colA IN ( SELECT tabA.colA FROM tabA WHERE tabA.colB = 1 )

我可能会遗漏一些东西,但你不需要这个子查询。你为什么不在常规的条件下这样做:

SELECT
  tabA.colA,
  tabA.colB,
FROM tabA
WHERE tabA.colB = 1

答案 2 :(得分:0)

您可以将IN谓词用于多个列,如下所示:

SELECT  *
FROM    table
WHERE   (col1, col2) IN
        (
        SELECT  col3, col4
        FROM    othertable
        )

如果您想选择COUNT(*)以及每个值,请使用:

SELECT  colA, colB, cnt
FROM    (
        SELECT  COUNT(*) AS cnt
        FROM    tabA
        WHERE   colB = 1
        ) q,
        tabA
WHERE   colB = 1