Sabine: MySQL IF

Hallo

SELECT * test_tabelle
OK

SELECT * FROM test_tabelle WHERE test_spalte = 'test1'
OK

SELECT * FROM test_tabelle WHERE test_spalte = 'test1' OR test_spalte = 'test2'
OK

SELECT * FROM test_tabelle WHERE IF(test_spalte = 'test1', 'test_spalte = 'test2'')
Nicht OK

Warum ?

MySQL Version 4.0.20-standard

http://dev.mysql.com/doc/mysql/en/control-flow-functions.html hilft auch nicht

Sabine

  1. Hallo

    SELECT * test_tabelle
    OK

    SELECT * FROM test_tabelle WHERE test_spalte = 'test1'
    OK

    SELECT * FROM test_tabelle WHERE test_spalte = 'test1' OR test_spalte = 'test2'
    OK

    SELECT * FROM test_tabelle WHERE IF(test_spalte = 'test1', 'test_spalte = 'test2'')
    Nicht OK

    Warum ?

    Versuchs mal mit SELECT * FROM test_tabelle WHERE test_spalte = 'test1' AND 'test_spalte = 'test2'

  2. SELECT * FROM test_tabelle WHERE test_spalte = 1 OR test_spalte = 2
    OK

    SELECT * FROM test_tabelle WHERE IF(test_spalte = 1, 'test_spalte = 2')
    Nicht OK

    auch mit zahlen geht kein IF, es liegt also nicht an ''

    ich benötige aber IF für ein komplexere sql-statement

    sabine

    1. Hallo,

      SELECT * FROM test_tabelle WHERE IF(test_spalte = 1, 'test_spalte = 2')
      Nicht OK

      das sieht für mich so aus, daß hier - bei der if() Funktion - der dritte Parameter fehlt.
      http://dev.mysql.com/doc/mysql/en/control-flow-functions.html
      Ich weiß aber auch nicht, ob eine solche if-Funktion im where-clause funktioniert. In einem solchen Fall würde ich eher ein UNION verwenden, und/oder mir mal Gedanken über das DB-Design machen.

      Während das if-Statement eine ganz andere Struktur hat.
      http://dev.mysql.com/doc/mysql/en/if-statement.html

      cu,
      ziegenmelker

  3. Hallo,

    Ich versuche mal dein Problem zu verstehen,
    du willst aus test_tabelle alle zeilen mit test_spalte = 'test2', wobei 'test2' mit 'test1' ersetzt werden soll.
    Hab sowas noch nie gemacht aber ich meine so ein query sollte funktionieren:

    SELECT 'test2' as test_spalte, * FROM test_tabelle WHERE test_spalte = 'test1'

    1. Ups hab test1 und test2 im Query durcheinandergebracht ^^'

  4. yo,

    SELECT * FROM test_tabelle WHERE IF(test_spalte = 'test1', 'test_spalte = 'test2'')
    Nicht OK

    zum einen fehlt die fehlermeldung, die du bekommst. die ist immer hilfreich dabei. zum anderen kann deine query so nicht funktionieren, semantisch und syntaktisch nicht. ich bin mir nicht ganz sicher, was du erreichen willst. aber meine kristall-kugel schlägt mir folgendes vor.

    SELECT IF(test_spalte = 'test1', 'test2', test_spalte) AS Spalte
    FROM test_tabelle
    WHERE test_spalte = 'test1' OR test_spalte = 'test2'

    Ilja

    1. Hi Ilja,

      ich bin mir nicht ganz sicher, was du erreichen willst. aber meine kristall-kugel schlägt mir folgendes vor.

      SELECT IF(test_spalte = 'test1', 'test2', test_spalte) AS Spalte
      FROM test_tabelle
      WHERE test_spalte = 'test1' OR test_spalte = 'test2'

      da würde die Ergebnismenge wohl nur aus 'test2' bestehen - ob es wirklich das ist, was Sabine möchte?

      Ich weiß es aber auch nicht ;-)

      Gruß,
      Andreas.

  5. Hallo Sabine,

    IF in der WHERE-Klausel funktioniert leider nicht - deine Idee hatte ich auch schon ;-)

    Pit