如何在MySQL连接查询中使用IF语句?

Joh*_*man 12 mysql sql

我有一个SQL查询,它根据条件以不同的方式连接表.

SELECT m.id, u.first_name AS otherUser
FROM matches AS m
IF (u.id=m.user2ID)
    LEFT JOIN users AS u ON u.id = m.user1ID
ELSE
    LEFT JOIN users AS u ON u.id = m.user2ID
ENDIF
WHERE m.user1ID=2 OR m.user2ID=2
Run Code Online (Sandbox Code Playgroud)

matches是一个包含整数列user1ID和user2ID的表.users是一个包含我的Web应用程序用户的表.users有一个名为的VARCHAR字段first_name.

此查询的目的是获取与当前用户匹配的用户的名称.

但是,MySQL返回此错误:

#1064 - You have an error in your SQL syntax; 
check the manual that corresponds to your MySQL server version for 
the right syntax to use near 'IF (u.id=m.user2ID) LEFT JOIN users 
AS u ON u.id = m.user1ID ELSE LEFT JOIN user' at line 3
Run Code Online (Sandbox Code Playgroud)

为什么?

Doj*_*ojo 10

将条件指定为ON子句的一部分:

SELECT m.id, u.first_name AS otherUser
FROM matches AS m
LEFT JOIN users AS u ON (u.id=m.user2ID and u.id = m.user1ID) or (u.id<>m.user2ID and u.id = m.user2ID) 
WHERE m.user1ID=2 OR m.user2ID=2
Run Code Online (Sandbox Code Playgroud)

另一种做同样事情的方法:

SELECT m.id, u.first_name AS otherUser
FROM matches AS m
LEFT JOIN users AS u ON IF(u.id=m.user2ID,u.id = m.user1ID,u.id = m.user2ID) 
WHERE m.user1ID=2 OR m.user2ID=2
Run Code Online (Sandbox Code Playgroud)


Som*_*luk 6

使用此查询:

SELECT m.id,u.first_name AS otherUser FROM匹配AS m LEFT JOIN用户AS u ON u.id = m.user1ID和u.id = m.user2ID LEFT JOIN用户AS u1 ON u1.id = m.user2ID WHERE .user1ID = 2或m.user2ID = 2

更新的查询:

SELECT m.id, u.first_name AS otherUser
FROM matches AS m
LEFT JOIN users AS u ON u.id = (CASE WHEN u.id=m.user2ID 
                                   THEN m.user1ID
                                   ELSE m.user2ID
                               END)
WHERE m.user1ID=2 OR m.user2ID=2
Run Code Online (Sandbox Code Playgroud)

检查此

还要检查此MYSQL内部联接if语句。这可能对您有帮助。


Alf*_*doy 0

您不能IF THEN ELSE END IFSELECT这种方式使用 -stuff。但是,您可以在存储过程和函数中使用它。

我会JOIN u.id同时使用 andm.user1ID来避免重复。m.user2IDDISTINCT

您可以IF()在 SELECT 中使用 ,但不能使用 进行流控制IF()