如何在MySQL-Join的ON条件中使用if子句?

时间:2015-05-09 11:04:11

标签: mysql sql if-statement join

我想在MySQL IF的{​​{1}}条件中使用两个ON子句。这是我的工作代码:

join

为什么不能正常工作?错误的语法?

2 个答案:

答案 0 :(得分:1)

if返回单个值,而on子句应该跟一个条件。您可以使用一系列orand运算符来构造所需的逻辑:

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