MySQL子查询WHERE IN

时间:2015-06-30 20:41:50

标签: mysql subquery where-clause where-in

我在下面有这个查询并运行它,但它一直说我有MySQL的不同版本? 我认为问题是WHERE IN及其子查询。

任何人都可以帮助我吗?

SELECT Field2, Field3, Count(Distinct Field1)
FROM learning.master
WHERE Field3 IN 
(SELECT Field3, COUNT(Distinct Field1)
FROM learning.master_06302015
WHERE (Field2 IS NOT NULL AND Field3 IS NOT NULL AND Field7 IS NOT NULL)
GROUP BY Field3
ORDER BY COUNT(Distinct Field1)
LIMIT 10)
Group BY Field2, Field3;

1 个答案:

答案 0 :(得分:1)

修改

当子查询中包含LIMIT时,使用联接操作而不是WHERE IN

(编辑删除了原始答案的第一部分。感谢Gordon指出这一点。)

<击> 只需从子查询的SELECT列表中删除此表达式 , COUNT(Distinct Field1)

像这样:

 SELECT t.Field2
      , t.Field3
      , COUNT(DISTINCT t.Field1) 
   FROM learning.master t
  WHERE Field3 IN ( SELECT o.Field3
                      FROM learning.master_06302015 o
                     WHERE o.Field2 IS NOT NULL 
                       AND o.Field3 IS NOT NULL
                       AND o.Field7 IS NOT NULL
                     GROUP BY o.Field3
                     ORDER BY COUNT(DISTINCT o.Field1) 
                     LIMIT 10
                  )
  GROUP BY t.Field2, t.Field3

<击>

或者,使用连接操作,如下所示:

 SELECT t.Field2
      , t.Field3
      , COUNT(DISTINCT t.Field1) 
   FROM learning.master t
   JOIN ( SELECT o.Field3
            FROM learning.master_06302015 o
           WHERE o.Field2 IS NOT NULL 
             AND o.Field3 IS NOT NULL
             AND o.Field7 IS NOT NULL
           GROUP BY o.Field3
           ORDER BY COUNT(DISTINCT o.Field1) 
           LIMIT 10
        ) p
     ON p.Field3 = t.field3   
  GROUP BY t.Field2, t.Field3