2016-07-19 8 views
-1

Ist es möglich, eine Abfrage zu erstellen, die die where-Klausel entsprechend einer Bedingung ändert? Zum Beispiel möchte ich * aus Tabelle 1 auswählen, wo die Daten 19/Juli/2016 sind, aber wenn die Feld-ID Null ist, dann tue nichts, sonst vergleiche die ID mit etwas anderem. Wie die Abfrage unten?MySQL IF on Where-Klausel

Select * from table1 where date="2016-07-19" if(isnull(id),"",and id=(select * from ...)) 
+0

OK, ich sehe die zwei Antworten, eine meiner, haben interpretiert, was Sie auf verschiedene Arten wollen. Sie können also die Frage bearbeiten, um zu verdeutlichen, was Sie mit "nichts tun" gemeint haben. – MAP

Antwort

0

Ja. Dies sollte möglich sein.

Wenn wir davon ausgehen, dass date und id Angaben beziehen sich auf Spalten in (der leider genannt) Tabelle table1, wenn ich zu verstehen, was Sie zu erreichen versuchen, könnten wir eine Abfrage wie schreiben dies:

SELECT t.id 
     , t.date 
     , t.... 
    FROM table1 t 
    WHERE t.date='2016-07-19' 
    AND ( t.id IS NULL 
     OR t.id IN (SELECT expr FROM ...) 
     ) 

Es wäre auch möglich, die MySQL IF() und IFNULL() Funktionen zu übernehmen, wenn es irgendeine Anforderung zu tun, das ist, .

Soweit der Text der SQL-Anweisung dynamisch geändert wird, nachdem die Anweisung an die Datenbank übergeben wurde, ist das nicht möglich. Alle dynamischen Änderungen am SQL-Text müssen durchgeführt werden, wenn die SQL-Anweisung generiert wird, vor es an die Datenbank gesendet wird.

Meine persönliche Präferenz wäre eine Join-Operation anstelle eines IN (subquery) Prädikats zu verwenden.

0

Ich denke, du versuchst zu hart. Wenn ID NULL ist, entspricht das einem FALSE in der Where-Klausel. Also:

Select * from table1 where date="2016-07-19" and id=(select * from ...) 

Sollte nur die Datensätze übereinstimmen, die Sie wollen. Wenn idNULL ist, bekommst du nichts.