我在where子句中使用别名时遇到问题.
我有这样的表:
我存储用户,他们可以互相发送消息.消息数据存储在social_messages表中,其中包含core_users_sender和core_users_receiver ids.
现在,当用户登录系统时,我想显示他/她与之交谈的那些用户的列表.
(登录core_users.id是6)我使用此查询并获取用户进行了对话而没有问题的朋友的ID:
SELECT
messages.id,
messages.status,
messages.send_date,
IF(
core_users_sender = 6,
core_users_receiver,
core_users_sender
) as friend_id
FROM
social_messages messages
WHERE
messages.core_users_sender = 6
OR
messages.core_users_receiver = 6
GROUP BY
friend_id
Run Code Online (Sandbox Code Playgroud)
但问题是,当我尝试使用friend_id从core_users表中获取数据并使用查询时:
SELECT
messages.id,
messages.status,
messages.send_date,
IF(
core_users_sender = 6,
core_users_receiver,
core_users_sender
) as friend_id,
users.fullname
FROM
social_messages messages,
core_users users
WHERE
users.id = friend_id
AND
(
messages.core_users_sender = 6
OR
messages.core_users_receiver = 6
)
GROUP BY
friend_id
Run Code Online (Sandbox Code Playgroud)
我得到错误,因为friend_id不能在where子句中使用,因为它在select中计算
您不能在where子句中使用别名.使用原始子查询
where users.id = IF(
core_users_sender = 6,
core_users_receiver,
core_users_sender
)
Run Code Online (Sandbox Code Playgroud)
不允许在WHERE子句中引用列别名,因为在执行WHERE子句时可能尚未确定列值.