1

用 JOIN 写下这个 ..how?因为这很慢..

SELECT *
FROM table1 
WHERE ID IN (SELECT ID
             FROM table1
             GROUP BY ID
             HAVING COUNT(*) = 2
             AND MAX(awaiting) = 1)
AND awaiting = 1

那么,我该怎么写呢?

4

3 回答 3

2

这是join版本:

SELECT t1.*
FROM table1 t1 join
     (SELECT ID
      FROM table1
      GROUP BY ID
      HAVING COUNT(*) = 2 AND MAX(awaiting) = 1
     ) tsum
     on t1.id = tsum.id
WHERE t1.awaiting = 1
于 2013-08-21T12:05:35.087 回答
1

我猜awaiting是 0 或 1。如果在你的内部查询MAX(awaiting) = 1中是多余的,因为 WHERE 语句awaiting = 1

同样在这种情况下,您可以使用以下查询。

SELECT *
FROM table1 as T1
WHERE 
awaiting = 1
AND
(SELECT count(*) FROM table1 WHERE ID=T1.ID)=2
于 2013-08-21T12:19:39.233 回答
1
SELECT t1.*
FROM table1 AS t1
INNER JOIN 
(
   SELECT ID
   FROM table1
   GROUP BY ID
   HAVING COUNT(*) = 2
      AND MAX(awaiting) = 1
) AS t2 ON t1.ID = t1.ID AND t1.awaiting = t2.awaiting
WHERE t1.awaiting = 1;
于 2013-08-21T12:05:37.510 回答