我正在尝试在这两个用户之间找到共同的朋友:user1和user92
这是成功显示它们的SQL:
SELECT IF(user_a = 1 OR user_a = 92, user_b, user_a) friend
FROM friendship
WHERE (user_a = 1 OR user_a = 92) OR (user_b = 1 OR user_b = 92)
GROUP BY 1
HAVING COUNT(*) > 1
它的外观如下:
朋友
61个
72个
73个
74个
75个
76个
77个
78个
79个
80个
81个
所以现在我想在数字72之后选择所有用户,我尝试用这个SQL做但是它不起作用?它给了我错误,“where子句中的未知列名朋友”
SELECT IF(user_a = 1 OR user_a = 92, user_b, user_a) friend
FROM friendship
WHERE friend > 72
AND (user_a = 1 OR user_a = 92) OR (user_b = 1 OR user_b = 92)
GROUP BY 1
HAVING COUNT(*) > 1
我做错了什么,或者正确的方法是什么?
答案 0 :(得分:1)
您刚刚在SELECT子句中定义了“friend”列,因此WHERE子句无法“看到”它(它在SELECT子句之前处理)。
子查询
SELECT * FROM (
SELECT IF(user_a = 1 OR user_a = 92, user_b, user_a) friend
FROM friendship
WHERE (user_a = 1 OR user_a = 92) OR (user_b = 1 OR user_b = 92)
) X
WHERE friend > 72
GROUP BY friend
HAVING COUNT(*) > 1
答案 1 :(得分:0)
您可以将IF()
复制到WHERE
子句中。另请注意,您需要将WHERE
的第二部分组合在一起:
SELECT IF(user_a = 1 OR user_a = 92, user_b, user_a) friend
FROM friendship
WHERE IF(user_a = 1 OR user_a = 92, user_b, user_a) > 72
AND ((user_a = 1 OR user_a = 92) OR (user_b = 1 OR user_b = 92))
GROUP BY 1
HAVING COUNT(*) > 1
答案 2 :(得分:0)
我正试图在你的台词之间阅读 您是否尝试在“页面”中列出结果,这是您想要从72开始阅读的原因?
如果您正在尝试创建页面,请查看LIMIT foo,bar foo是结果集中的起始行号(不是您的ID),bar是要返回的行数。
LIMIT 100,20将从结果集中返回20行,从第100行开始。