2015-06-30 2 views
-1

У меня есть этот запрос ниже и запускал его, но он продолжал говорить, что у меня есть другая версия MySQL? Я думаю, что проблема 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

Да, есть проблема в подзапроса. Подзапрос должен возвращать выражение * single * (столбец). – spencer7593

+0

Что делать, если у меня есть те же таблицы для основного запроса и подзапроса? – prodirector

+0

ВЫБОР Field2, Field3, граф (Distinct Field1) ОТ learning.master_06302015 ГДЕ Field3 В (ВЫБОР field3 ОТ learning.master_06302015 ГДЕ (Field2 НЕ NULL AND Field3 IS NOT NULL И Field7 IS NOT NULL) GROUP BY Поле3 ЗАКАЗ ПО СЧЕТУ (отличительное поле1) DESC LIMIT 10;) Группа BY Field2, Field3 ; – prodirector

ответ

1

EDIT

Используйте операцию объединения, а не WHERE IN, когда есть ПРЕДЕЛ участвует в подзапроса.

(редактировать вычеркивает первую часть оригинального ответа. Спасибо Гордон за указание на это.)

Просто удалите это выражение , COUNT(Distinct Field1) из списка SELECT, подзапроса.


Как это:

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 
+0

Я не думаю, что первый работает в MySQL (который не позволяет 'LIMIT' в некоторых подзапросах). Во-вторых, все должно быть хорошо. –

+0

@GordonLinoff: Вы правы. MySQL возвращает Код ошибки: 1235 «Эта версия MySQL еще не поддерживает« LIMIT & IN/ALL/ANYSOME подзапрос ». Мой ответ редактируется, чтобы вычеркнуть первую рекомендацию для SQL. Вместо этого используйте операцию JOIN. – spencer7593

Смежные вопросы