2017-01-27 3 views
0

Ich habe eine Abfrage, die ich eine Variable in eine WHERE-Anweisung einfügen möchte.Anfrage WHERE Anweisung als @ Variable

WHERE @Variable

Ich habe versucht, die folgenden (vereinfacht), aber es scheint nicht zu funktionieren.

ANMERKUNG: Ich habe das Verkettungselement hier nicht eingefügt, um den Teil herauszufinden, bevor ich die Frage gestellt habe.

SET @id := x; 
SET @n := (SELECT COUNT(*) FROM Table2 WHERE [email protected]); 
SET @Variable := (
(
Table1.Column1=(SELECT Column1 FROM Table2 WHERE [email protected] LIMIT 1 OFFSET 0) 
AND Table1.Column2=(SELECT Column2 FROM Table2 WHERE [email protected] LIMIT 1 OFFSET 0) 
AND Table1.Column3=(SELECT Column3 FROM Table2 WHERE [email protected] LIMIT 1 OFFSET 0) 
) 
......... 
OR 
(
Table1.Column1=(SELECT Column1 FROM Table 2 WHERE [email protected] LIMIT 1 OFFSET @n) 
AND Table1.Column2=(SELECT Column2 FROM Table2 WHERE [email protected] LIMIT 1 OFFSET @n) 
AND Table1.Column3=(SELECT Column3 FROM Table2 WHERE [email protected] LIMIT 1 OFFSET @n) 
) 
) 
; 


SELECT Table1.Column1, Table1.Column2, Table1.Column3, Table2.Column1, Table2.Column2, Table2.Column3 
FROM Table1, Table2 
WHERE 
@Variable 
; 
+0

Um eine dynamische Abfrage zu erstellen und auszuführen, verwenden Sie etwas wie http://stackoverflow.com/questions/23178816/mysql-dynamic-query-in-stored-procedure und http://stackoverflow.com/questions/8549619/mysql-dynamisch-Build-Abfrage-String-in-einer-gespeicherten-Prozedur-basiert-auf-Logik. 'wo @ var' wird nicht funktionieren. 'where field = @ var' funktioniert so, wie Sie Ihre Abfrage schreiben. – zedfoxus

+0

Dank zedfoxus, die meine Frage wirklich beantwortet, kann es nicht auf die Weise getan werden, wie ich es will, also muss ich meine Frage neu überdenken und wie ich es in eine Loop-Anweisung verwandeln kann, die N Blöcke lang sein kann. TY – denski

+0

Ich fand "ANY", was zu tun scheint, was ich will - Vergleichen Sie jede Zeile in einer Unterabfrage. Ich werde die Antwort hier trotzdem posten. – denski

Antwort

0

So This:

SET @IDNumber := 21; 
SELECT Players.PlayerID, COUNT(*) AS Games, SUM(Games.Points) 
FROM Teams, Players, Games 

WHERE 
Teams.PlayerID=Players.PlayerID 
AND 
Games.Game=Teams.Game 
AND 
Games.Team=Teams.Team 
AND 
Games.GameDate=Teams.GameDate 
AND 
(
Games.Game= ANY (SELECT Game FROM Teams WHERE [email protected]) 
AND 
Games.Team= ANY (SELECT Team FROM Teams WHERE [email protected]) 
AND 
Games.GameDate= ANY (SELECT GameDate FROM Teams WHERE [email protected]) 
) 

GROUP BY Teams.PlayerID 
ORDER BY Games DESC 
; 

erstellt diese:

+----------+-------+-------------------+ 
| PlayerID | Games | SUM(Games.Points) | 
+----------+-------+-------------------+ 
|  15 |  8 |    10 | 
|  21 |  8 |    10 | 
|  8 |  8 |    10 | 
|  14 |  6 |     7 | 
|  5 |  6 |     7 | 
|  19 |  5 |     6 | 
|  11 |  5 |     7 | 
|  12 |  3 |     4 | 
|  10 |  3 |     3 | 
|  4 |  2 |     3 | 
+----------+-------+-------------------+ 
10 rows in set (0.01 sec) 

das ist genau das, was ich suchte.