Trädvy Permalänk
Medlem
Plats
Framför PC'n
Registrerad
Okt 2007

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?"

MSI GE620DX-291NE - GeForce GT 555M, Core i5, 2410M 2,3 GHz
http://www.inet.se/produkt/1968984/msi-ge620dx-291ne-geforce-...
iPad Mini 2 + Macbook early 2011
Toshiba Satellite P850-30Q

Trädvy Permalänk
Medlem
Plats
Umeå
Registrerad
Mar 2002

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;

The difference between stupidity and genius - the latter has limits

Trädvy Permalänk
Medlem
Registrerad
Feb 2012

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)

Trädvy Permalänk
Medlem
Plats
Framför PC'n
Registrerad
Okt 2007
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

MSI GE620DX-291NE - GeForce GT 555M, Core i5, 2410M 2,3 GHz
http://www.inet.se/produkt/1968984/msi-ge620dx-291ne-geforce-...
iPad Mini 2 + Macbook early 2011
Toshiba Satellite P850-30Q

Trädvy Permalänk
Medlem
Registrerad
Nov 2003
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'

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

Trädvy Permalänk
Medlem
Plats
Göteborg
Registrerad
Maj 2004
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...

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

Trädvy Permalänk
Medlem
Registrerad
Nov 2003
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

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