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?
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
Überprüfen Sie diese Quelle .
Überprüfen Sie auch diese MYSQL Inner Join if-Anweisung . Es könnte für Sie hilfreich sein.
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.
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.