我有这个问题:
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子查询'
有没有人知道这样做的其他任何方式?
由于
答案 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)
您也可以对内部查询进行双重嵌套以绕过此限制,请参阅:
答案 3 :(得分:0)
如果您希望获得类似&#34;每组的前N行&#34;这种限制是一种痛苦。但在你的情况下,即使有可能,我也不会使用该功能。您尝试做的是计算每行CxID
除一行之外的所有行。您只需要减去不同CustomerID的数量,即count(DISTINCT cp.CxID)
。因此,您的最终查询应该如下:
SELECT count(cp.CxID) - count(DISTINCT cp.CxID) as intSmokers
FROM CustPrimarySmoking cp