1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

[SQLite] Wenn <bedingung==true> DANN <prüfe, ob bedingung2==true>

Dieses Thema im Forum "Relationale Datenbanksysteme" wurde erstellt von Hoeze, 24. April 2012.

  1. Hoeze

    Hoeze Grünschnabel

    Ich hab in Java folgendes Query:
    Code (SQL):
    1. SELECT f.* FROM (SELECT item,MIN(price) AS minprice FROM stock GROUP BY item) AS x INNER JOIN stock AS f ON f.item = x.item AND f.price = x.minprice WHERE (world = 'world' OR world = 'world_nether')
    Jetzt will ich das WHERE erweitern:
    Wenn <damageable==true> DANN <prüfe, ob durability==0>

    Wie stelle ich das an?

    Struktur:
    Code (SQL):
    1. CREATE TABLE stock('id' INTEGER PRIMARY KEY,'durability' INTEGER, 'damageable' BOOLEAN, 'enchantments' VARCHAR(80),'world' VARCHAR(80),'seller' VARCHAR(80) NOT NULL,'item' INTEGER NOT NULL, 'price' FLOAT NOT NULL,'amount' INTEGER NOT NULL)
  2. Yaslaw

    Yaslaw n/a Moderator

    item: Ein Tipp. Formatiere SQL-Statements in ein lesbares Format. Einzeiler sind in dieser komplexität nicht mher lesbar. Klammern zählen ist ein schlechtes Hobby. Ps: Siehe auch den dritten Punkt meine Signatur - normalerweise lese ich solche SQLs NICHT!

    Etwa so kann man das LESBAR formatieren
    Code (SQL):
    1. SELECT
    2.     f.*
    3. FROM
    4.     (
    5.         SELECT
    6.             item,
    7.             MIN(price) AS minprice
    8.         FROM
    9.             stock
    10.         GROUP BY
    11.             item
    12.     ) AS x
    13.     INNER JOIN stock AS f
    14.         ON f.item = x.item
    15.         AND f.price = x.minprice
    16. WHERE
    17.     (
    18.         world = 'world'
    19.         OR world = 'world_nether'
    20.     );
    Code (SQL):
    1. CREATE TABLE stock(
    2.     'id' INTEGER PRIMARY KEY,
    3.     'durability' INTEGER,
    4.     'damageable' BOOLEAN,
    5.     'enchantments' VARCHAR(80),
    6.     'world' VARCHAR(80),
    7.     'seller' VARCHAR(80) NOT NULL,
    8.     'item' INTEGER NOT NULL,
    9.     'price' FLOAT NOT NULL,
    10.     'amount' INTEGER NOT NULL
    11. );
    item: mit einem CASE kannst du das wahrscheinlich lösen. Das folgende Beispiel ist für MySQL. In SQLlIte gibt es sicher was ähnliches.
    Code (SQL):
    1. ...
    2. WHERE
    3.     (
    4.         world = 'world'
    5.         OR world = 'world_nether'
    6.     )
    7.     AND CASE WHEN
    8.             damageable
    9.         THEN
    10.             (durability = 0)
    11.         ELSE
    12.             TRUE
    13.         END CASE;
    Zuletzt von einem Moderator bearbeitet: 23. Mai 2014
  3. Hoeze

    Hoeze Grünschnabel

    Danke, sry für die Formatierung, SQL ist nicht wirklich mein Fachgebiet...
    Besonders, wenn man bedenkt, dass die Lösung viel einfacher gewesen wäre und ich so mal wieder nen sinnlosen Therad eröffnet habe:
    Code (SQL):
    1. SELECT
    2.     f.*
    3. FROM
    4.     (
    5.         SELECT
    6.             item,
    7.             MIN(price) AS minprice
    8.         FROM
    9.             stock
    10.         GROUP BY
    11.             item
    12.     ) AS x
    13.     INNER JOIN stock AS f
    14.         ON f.item = x.item
    15.         AND f.price = x.minprice
    16. WHERE
    17.     (
    18.         world = 'world'
    19.         OR world = 'world_nether'
    20.     )
    21.     AND
    22.     (
    23.         damageable == 'false'
    24.         OR durability == 0
    25.     )

Diese Seite empfehlen