Mysql在where子句中选择别名

Sha*_*ark 0 mysql sql

我在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中计算

jue*_*n d 5

您不能在where子句中使用别名.使用原始子查询

where users.id = IF(
                core_users_sender = 6,
                core_users_receiver,
                core_users_sender
        )
Run Code Online (Sandbox Code Playgroud)

不允许在WHERE子句中引用列别名,因为在执行WHERE子句时可能尚未确定列值.