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

Hoeze

Mitglied
Ich hab in Java folgendes Query:
SQL:
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:
SQL:
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)
 
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
SQL:
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'
	);
SQL:
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
);

item: mit einem CASE kannst du das wahrscheinlich lösen. Das folgende Beispiel ist für MySQL. In SQLlIte gibt es sicher was ähnliches.
SQL:
...
WHERE 
	(
		world = 'world' 
		OR world = 'world_nether'
	)
	AND CASE WHEN
			damageable
		THEN
			(durability = 0)
		ELSE
			TRUE
		END CASE;
 
Zuletzt bearbeitet von einem Moderator:
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:
SQL:
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'
    )
    AND 
    (
        damageable == 'false' 
        OR durability == 0
    )
 

Neue Beiträge

Zurück