Permalänk
Medlem

SQL - mer kriterier

Hej,

Har en tabell (ica) och 3 kolumner (korg, innehåll, antal),
Nedan visar alla korgar som har 3 apelsiner, men om jag vill lägga till äpple som har 4, hur gör jag då ?
Har testat alla möjliga sätt, vill få fram gemensamma korgar som innehåller både apelsin = 3st och äpplen = 4st.

select
korg
from
ica
where
innehåll
like 'apelsin'
and
antal
like '3';

Tacksam för all hjälp
"edit, varför kan man inte lägga in som kod?"

Visa signatur

Intel NUC8i5BEH - Iris Plus 655, i5 8259U 2,3GHz
MSI GE620DX-291NE - GT 555M, i5 2410M 2,3GHz
iPad Mini 4 & Macbook early 2011

Permalänk
Medlem

Använd [code] kod [/code] runt din text för att skriva kod.

SQL:en borde väl bli nått i stil med:

SELECT t.korg FROM ica as t JOIN ica as t2 ON t.korg=t2.korg WHERE t.innehall='apelsin' AND t.antal=3 AND t2.innehall='äpplen' AND t2.antal=4;

Visa signatur

The difference between stupidity and genius - the latter has limits

Permalänk

Jag ser inte hur detta skulle vara användbart i praktiken men för att ta fram alla "korg" från ica tabellen där innehåll är äpple och antal är 4 samt innehåll är apelsin och antal är 3 så skulle jag bara gjort såhär:

SELECT `korg` FROM `ica` WHERE (`innehåll` = `apelsin` AND `antal` = 3) OR (`innehåll` = `äpple` AND `antal` = 4)

Permalänk
Medlem
Skrivet av Holmen1337:

Jag ser inte hur detta skulle vara användbart i praktiken men för att ta fram alla "korg" från ica tabellen där innehåll är äpple och antal är 4 samt innehåll är apelsin och antal är 3 så skulle jag bara gjort såhär:

SELECT `korg` FROM `ica` WHERE (`innehåll` = `apelsin` AND `antal` = 3) OR (`innehåll` = `äpple` AND `antal` = 4)

Har nu testat och försökt läst mig till men får inte fram det jag vill ha.
Med queryn ovanför, får jag fram alla korg med apelsin eller äpple, men vill ha korg med både apelsin och äpple, inte korg med bara nåt utav de.
Alltså, apelsin och äpple ska ha samma korg.

Tack på förhand

Visa signatur

Intel NUC8i5BEH - Iris Plus 655, i5 8259U 2,3GHz
MSI GE620DX-291NE - GT 555M, i5 2410M 2,3GHz
iPad Mini 4 & Macbook early 2011

Permalänk
Skrivet av aaaaa:

Har nu testat och försökt läst mig till men får inte fram det jag vill ha.
Med queryn ovanför, får jag fram alla korg med apelsin eller äpple, men vill ha korg med både apelsin och äpple, inte korg med bara nåt utav de.
Alltså, apelsin och äpple ska ha samma korg.

Tack på förhand

Byt ut 'OR' mot 'AND'

Visa signatur

Workstation: i5-6600K, 16GB DDR4, ASUS Z170 Pro Gaming, 250GB Samsung 850 Pro SSD, DELL Ultrasharp U2715 27" IPS
Laptop: MacBook Pro 13" Intel Core 2 Duo 2.4GHz, 8GB RAM, 1280x800, 250GB SSD, DELL Ultrasharp 2209WA 22" LCD
Filserver: HP Proliant DL120 G7, 16GB RAM, 4TB RAID 1

Permalänk
Medlem
Skrivet av superboss:

Byt ut 'OR' mot 'AND'

Det kommer inte att fungera. Innehållet kan ju inte vara både 'apelsin' och 'äpple' på samma rad.

Gissar att man får göra något sånt här typ;

SELECT * FROM ica INNER JOIN ( SELECT DISTINCT korg FROM ica WHERE innehåll = 'äpple' AND antal = 4 ) AS apples ON apples.korg = ica.korg INNER JOIN ( SELECT DISTINCT korg FROM ica WHERE innehåll = 'apelsin' AND antal = 3 ) AS oranges ON oranges.korg = ica.korg

Går ju säkert att lösa på något snyggare/enklare sätt, men kommer inte på något just nu...

Visa signatur

as far as we can tell, the massacre went well...

Permalänk
Skrivet av jovnas:

Det kommer inte att fungera. Innehållet kan ju inte vara både 'apelsin' och 'äpple' på samma rad.

Förlåt, jag som läste slarvigt :/ Här kommer en lösning:

http://sqlfiddle.com/#!9/8a032/6

SELECT korg FROM ica WHERE (innehall="apelsin" and antal=3) OR (innehall="äpple" and antal=4) GROUP BY korg HAVING COUNT(*) = 2

Visa signatur

Workstation: i5-6600K, 16GB DDR4, ASUS Z170 Pro Gaming, 250GB Samsung 850 Pro SSD, DELL Ultrasharp U2715 27" IPS
Laptop: MacBook Pro 13" Intel Core 2 Duo 2.4GHz, 8GB RAM, 1280x800, 250GB SSD, DELL Ultrasharp 2209WA 22" LCD
Filserver: HP Proliant DL120 G7, 16GB RAM, 4TB RAID 1