Mysql 在where子句中选择别名
我在where子句中使用别名时遇到问题 我有这样的桌子: 我存储用户,他们可以互相发送消息。消息数据存储在social_Messages表中,包含核心用户、发送者和接收者ID 现在,当用户登录系统时,我只想显示与他/她进行对话的那些用户的列表 (已登录core_users.id为6) 我使用此查询并获取用户与之进行对话的朋友的ID:Mysql 在where子句中选择别名,mysql,sql,Mysql,Sql,我在where子句中使用别名时遇到问题 我有这样的桌子: 我存储用户,他们可以互相发送消息。消息数据存储在social_Messages表中,包含核心用户、发送者和接收者ID 现在,当用户登录系统时,我只想显示与他/她进行对话的那些用户的列表 (已登录core_users.id为6) 我使用此查询并获取用户与之进行对话的朋友的ID: SELECT messages.id, messages.status, messages.send_date, IF(
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
但问题是,当我尝试使用friend_id从core_users表中获取数据并使用query时:
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
我收到错误,因为在where子句中不能使用friend,因为它是在select中计算的您不能在
where
子句中使用别名。使用原始子查询
where users.id = IF(
core_users_sender = 6,
core_users_receiver,
core_users_sender
)
不允许在WHERE子句中引用列别名,因为在执行WHERE子句时可能尚未确定列值
不能在
where
子句中使用别名。使用原始子查询
where users.id = IF(
core_users_sender = 6,
core_users_receiver,
core_users_sender
)
不允许在WHERE子句中引用列别名,因为在执行WHERE子句时可能尚未确定列值
我建议您按以下方式重新排序查询:
SELECT
messages.id,
messages.status,
messages.send_date,
users.fullname,
IF(
messages.core_users_sender IS NOT NULL,
messages.core_users_receiver,
messages.core_users_sender
) as friend_id
FROM
social_messages messages
left join core_users users_sender
on users_sender.id = messages.core_users_sender
and messages.core_users_sender = 6
left join core_users users_receiver
on users_receiver.id = messages.core_users_receiver
and messages.core_users_receiver = 6
WHERE
users_sender.id IS NOT NULL OR users_receiver.id IS NOT NULL
我建议您按以下方式重新排序查询:
SELECT
messages.id,
messages.status,
messages.send_date,
users.fullname,
IF(
messages.core_users_sender IS NOT NULL,
messages.core_users_receiver,
messages.core_users_sender
) as friend_id
FROM
social_messages messages
left join core_users users_sender
on users_sender.id = messages.core_users_sender
and messages.core_users_sender = 6
left join core_users users_receiver
on users_receiver.id = messages.core_users_receiver
and messages.core_users_receiver = 6
WHERE
users_sender.id IS NOT NULL OR users_receiver.id IS NOT NULL
您可以为表添加别名并使用它
SELECT messages.*, users.fullname
FROM
(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) as `messages`
JOIN
core_users users
ON
users.id = messages.friend_id
您可以为表添加别名并使用它
SELECT messages.*, users.fullname
FROM
(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) as `messages`
JOIN
core_users users
ON
users.id = messages.friend_id