我有一个MySQL查询,我有一个嵌套的SELECT,它将一个数组返回给父:
SELECT ...
FROM ...
WHERE ... IN (SELECT .... etc)
我想从嵌套的SELECT中存储返回结果的数量(行数),但是执行类似IN(SELECT count(...),columnA)的操作不起作用,因为IN只需要一个结果。
有没有办法存储返回的结果计数以供以后在父语句中使用?
答案 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