条件に応じてさまざまな方法でテーブルを左結合する 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
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
なぜ?
ベストアンサー1
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
同じことを行う別の方法:
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