Проблема с LIMIT & IN / ALL / ANY / SOME подзапросом

У меня есть этот запрос:

SELECT count(cp.CxID) as intSmokers FROM CustPrimarySmoking cp JOIN Customer c ON cp.CxID = c.CustomerID WHERE cp.CxID IN (SELECT CxID FROM CustPrimarySmoking WHERE CxID = cp.CxID LIMIT 1, 9999) 

Идея состоит в том, что счет будет основан на результатах вложенного запроса, который извлекает все записи для этого клиента. ИСКЛЮЧАЕТ первую запись.

ОДНАКО, я получаю эту ошибку, которая, я думаю, довольно терминальная:

1235 – Эта версия MySQL еще не поддерживает «LIMIT & IN / ALL / ANY / SOME subquery»

Кто-нибудь знает о других способах этого?

благодаря

Вот как вам нужно действовать. См. Пример, который я разработал.

 mysql> select * from test; +------+-------+ | id | name | +------+-------+ | 1 | name1 | | 2 | name2 | | 3 | name3 | | 4 | name4 | +------+-------+ 4 rows in set (0.00 sec) mysql> select * from test1; +------+------+--------+ | id | tid | name2 | +------+------+--------+ | 1 | 2 | name11 | | 2 | 3 | name12 | | 3 | 4 | name13 | +------+------+--------+ 3 rows in set (0.00 sec) mysql> select -> t1.name -> from -> test t1 -> join -> test1 t2 on t2.tid = t1.id -> join -> (select id from test where id <4 limit 3) as tempt on tempt.id = t1.id; +-------+ | name | +-------+ | name2 | | name3 | +-------+ 2 rows in set (0.00 sec) 

Надеюсь это поможет.

Вам не нужно использовать подзапрос для извлечения всех записей, просто исключите первый:

SELECT count(cp.CxID) as intSmokers FROM CustPrimarySmoking cp JOIN Customer c ON cp.CxID = c.CustomerID WHERE cp.CxID > (SELECT cxID FROM CustPrimarySmoking ORDER BY cxID LIMIT 1)

Предполагая, что cxid является числовым

Вы также можете дважды вложить внутренний запрос, чтобы обойти это ограничение, см.

Инструкция удаления Mysql с ограничением

Это ограничение больно, если вы хотите получить что-то вроде «верхних N строк для каждой группы». Но в вашем случае я бы не использовал эту функцию, даже если это было возможно. То, что вы пытаетесь сделать, – подсчитать все строки, кроме одной строки, каждый CxID . Все, что вам нужно, это просто вычесть количество различных count(DISTINCT cp.CxID) CustomerID, которое count(DISTINCT cp.CxID) . Таким образом, ваш окончательный запрос должен быть таким простым, как:

 SELECT count(cp.CxID) - count(DISTINCT cp.CxID) as intSmokers FROM CustPrimarySmoking cp