LIMIT&的问题IN / ALL / ANY / SOME子查询

时间:2011-02-15 13:18:22

标签: mysql sql mysql-error-1235

我有这个问题:

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子查询'

有没有人知道这样做的其他任何方式?

由于

4 个答案:

答案 0 :(得分:32)

这是您需要继续操作的方式。看看我做过的例子。

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)

希望这有帮助。

答案 1 :(得分:1)

您不需要使用子查询来检索所有记录,只需排除第一个:

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是数字

答案 2 :(得分:0)

您也可以对内部查询进行双重嵌套以绕过此限制,请参阅:

Mysql delete statement with limit

答案 3 :(得分:0)

如果您希望获得类似&#34;每组的前N行&#34;这种限制是一种痛苦。但在你的情况下,即使有可能,我也不会使用该功能。您尝试做的是计算每行CxID除一行之外的所有行。您只需要减去不同CustomerID的数量,即count(DISTINCT cp.CxID)。因此,您的最终查询应该如下:

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