我想在MySQL IF
的{{1}}条件中使用两个ON
子句。这是我的工作代码:
join
为什么不能正常工作?错误的语法?
答案 0 :(得分:1)
if
返回单个值,而on
子句应该跟一个条件。您可以使用一系列or
和and
运算符来构造所需的逻辑:
JOIN st_users as users
ON (messages.toUserID = 0 AND
messages.userID = users.ID) OR
(messages.toUserID != 0 AND
messages.userID = 2 AND
messages.toUserID = users.ID) OR
(messages.toUserID != 0 AND
messages.userID != 2 AND
messages.userID = users.ID)
答案 1 :(得分:1)
由于您始终加入users.ID
,因此可能会将IF
重写为CASE
,并返回单个值:
FROM messages
JOIN st_users AS users
ON CASE
WHEN messages.toUserID = 0 THEN messages.userID
WHEN messages.userID = 2 THEN messages.toUserID
ELSE messages.userID
END = users.ID
您也可以使用IF,但CASE是标准SQL: - )
FROM messages
JOIN st_users as users
ON IF(messages.toUserID = 0, messages.userID,
IF(messages.userID = 2, messages.toUserID, messages.userID)
) = users.ID