Wie verwende ich eine IF-Anweisung in einer MySQL-Join-Abfrage?

8

Ich habe eine SQL-Abfrage, die abhängig von einer Bedingung auf unterschiedliche Weise eine Tabelle verbindet.

%Vor%

matches ist eine Tabelle mit ganzzahligen Spalten user1ID und user2ID. users ist eine Tabelle, die Benutzer meiner Webanwendung enthält. users hat ein VARCHAR-Feld namens first_name .

Mit dieser Abfrage sollen die Namen der Benutzer mit dem aktuellen Benutzer abgeglichen werden.

Allerdings gibt MySQL diesen Fehler zurück:

%Vor%

Warum?

    
John Hoffman 08.04.2012, 15:59
quelle

4 Antworten

8

Geben Sie die Bedingung als Teil der ON-Klausel an:

%Vor%

Eine andere Möglichkeit, dasselbe zu tun:

%Vor%     
Dojo 08.04.2012 16:41
quelle
3

Verwenden Sie diese Abfrage:

  

SELECT m.id, erster Name AS otherUser FROM stimmt mit AS m LEFT überein   VERBINDEN Sie die Benutzer AS u ON u.id = m.user1ID UND u.id = m.user2ID LEFT JOIN Benutzer   AS u1 ON u1.id = m.user2ID WHERE m.user1ID = 2 ODER m.user2ID = 2

Aktualisierte Abfrage:

%Vor%

Überprüfen Sie diese Quelle .

Überprüfen Sie auch diese MYSQL Inner Join if-Anweisung . Es könnte für Sie hilfreich sein.

    
Somnath Muluk 08.04.2012 16:24
quelle
0

Sie können IF THEN ELSE END IF -stuff nicht in SELECT auf diese Weise verwenden. Sie können es jedoch in gespeicherten Prozeduren und Funktionen verwenden.

Ich würde JOIN u.id mit beiden m.user1ID und m.user2ID verwenden und DISTINCT verwenden, um Duplikate zu vermeiden.

Es gibt ein IF() , das Sie in SELECTs verwenden können, aber Sie können keine Flusskontrolle mit IF() durchführen.

    
Alfred Godoy 08.04.2012 16:07
quelle
0

Danke, Es hat für mich funktioniert. Habe etwas anderes wie unten versucht:

**

%Vor%

**

%Vor%

Hier ist GetQuarterFromMonth eine benutzerdefinierte Funktion, die Quarter für einen bestimmten Monat zurückgibt.

Das Ziel der obigen Abfrage besteht darin, den Wert von Quartal für alle Monate in Tabelle 1 aufzublasen. Wenn die Häufigkeit jährlich ist, sollte in diesem Fall der Wert für alle Monate 1-12 der Tabelle 1, die erreicht werden, aufgebläht werden erster Join-Zustand Falls die Häufigkeit monatlich ist, sollte jeder Monat aus Tabelle1 Tabelle2 zugeordnet werden. Der einzige eindeutige Fall ist die Behandlung der Viertelfrequenz.

    
Atul Mittal 07.12.2016 09:38
quelle

Tags und Links