Подтвердить что ты не робот

Проблема с 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"

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

Спасибо

4b9b3361

Ответ 1

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

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)

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

Ответ 2

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

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 является числовым

Ответ 4

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

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