Permalänk
Medlem

SQL OR med nummer

Tjena,

Har en tabell Products med kolumn Weight, men får ej använda IN för att få fram resultatet. Jag skall alltså få fram alla produkter som har vikt 17 ELLER 14 ELLER 12.

Försöker skriva något i stil med nedan:

SELECT Pnamn FROM Products WHERE WEIGHT = 17 OR 14 OR 12

Det är enkelt löst med IN operator, men jag skall som sagt ej använda IN.

SELECT PNAME FROM Products WHERE WEIGHT IN (17,14,12)

Tacksam för all hjälp!

Permalänk
Medlem

Du måste inte skriva "SELECT ... WHERE WEIGHT = 17 OR WEIGHT = 14 OR WEIGHT = 12", då?

Visa signatur

Spela Swemantle! Du vet att du vill.

Ibland har jag fel, men då är det någon annans fel.

Permalänk
Medlem
Skrivet av LemonIllusion:

Du måste inte skriva "SELECT ... WHERE WEIGHT = 17 OR WEIGHT = 14 OR WEIGHT = 12", då?

Jo... Att jag inte ens tänkte på det.. Känns lite märkligt att man måste formulera det så dock. Tack för hjälpen!

Permalänk
Medlem
Skrivet av Shkipan:

Jo... Att jag inte ens tänkte på det.. Känns lite märkligt att man måste formulera det så dock. Tack för hjälpen!

Om man ser det som ett mänskligt språk känns det ju onödigt övertydligt, men från datorn och SQLs perspektiv är det ganska solklart (och samma sak gäller typ alla programmeringsspråk). OR är ju en infix operator som tar två boolean expressions, "WEIGHT = 12" är en boolean expression eftersom resultatet är sant eller falskt, medans "14" varken är sant eller falskt. OR operatorn har ingen aning om vad den ska göra när den får en boolean expression och något som varken är sant eller falskt, lite som om jag skulle fråga dig vilken färg du föredrar, blå eller flygplan.

Visa signatur

Fractal Design Define R5 | MSI Z97-GD65 Gaming | MSI Geforce GTX 970 Gaming 4G | Intel i5 4690k | Cooler Master Hyper 212 EVO | EVGA Supernova G2 750W | 2x8GB Corsair Vengeance Low Profile DDR3 1600Mhz | Samsung 850 EVO | Seagate 1TB SATA3.5

Permalänk
Medlem
Skrivet av Tobberoth:

Om man ser det som ett mänskligt språk känns det ju onödigt övertydligt, men från datorn och SQLs perspektiv är det ganska solklart (och samma sak gäller typ alla programmeringsspråk). OR är ju en infix operator som tar två boolean expressions, "WEIGHT = 12" är en boolean expression eftersom resultatet är sant eller falskt, medans "14" varken är sant eller falskt. OR operatorn har ingen aning om vad den ska göra när den får en boolean expression och något som varken är sant eller falskt, lite som om jag skulle fråga dig vilken färg du föredrar, blå eller flygplan.

Tack för en bra förklaring!

Har endast ett fåtal uppgifter kvar nu, men en jag har fastnat på är

"How many products are delivered by each supplier?"

Har ett table kallat Deliveries som har följande kolumner:

S, P, QTY

S är supplier, P är products och QTY är quantity. I tabellen kan jag ju se hur många produkter som levereras av en viss supplier, men hur kan jag få ut att S1 | 6 S2 | 3 osv? Datatypen är nvarchar så jag kan inte använda SUM och liknande.

Permalänk
Medlem
Skrivet av Shkipan:

Tack för en bra förklaring!

Har endast ett fåtal uppgifter kvar nu, men en jag har fastnat på är

"How many products are delivered by each supplier?"

Har ett table kallat Deliveries som har följande kolumner:

S, P, QTY

S är supplier, P är products och QTY är quantity. I tabellen kan jag ju se hur många produkter som levereras av en viss supplier, men hur kan jag få ut att S1 | 6 S2 | 3 osv? Datatypen är nvarchar så jag kan inte använda SUM och liknande.

Följande borde väl funka?

SELECT S, COUNT(P) FROM Deliveries GROUP BY S;

Vad den gör är att den lägger ihop alla rader som har samma S och räknar hur många unika P den får. Svaret du får ut är alltså supplier och en siffra som visar hur många olika P den suppliern har i databasen.

Visa signatur

Fractal Design Define R5 | MSI Z97-GD65 Gaming | MSI Geforce GTX 970 Gaming 4G | Intel i5 4690k | Cooler Master Hyper 212 EVO | EVGA Supernova G2 750W | 2x8GB Corsair Vengeance Low Profile DDR3 1600Mhz | Samsung 850 EVO | Seagate 1TB SATA3.5

Permalänk
Avstängd
Skrivet av Shkipan:

S är supplier, P är products och QTY är quantity.

Varför inte döpa kolumnerna till det då?

Visa signatur
Permalänk
Medlem
Skrivet av CyberVillain:

Varför inte döpa kolumnerna till det då?

Är säkert skol-uppgifter, låter som det i första posten (får inte använda IN t ex).

Visa signatur

Fractal Design Define R5 | MSI Z97-GD65 Gaming | MSI Geforce GTX 970 Gaming 4G | Intel i5 4690k | Cooler Master Hyper 212 EVO | EVGA Supernova G2 750W | 2x8GB Corsair Vengeance Low Profile DDR3 1600Mhz | Samsung 850 EVO | Seagate 1TB SATA3.5

Permalänk
Medlem
Skrivet av CyberVillain:

Varför inte döpa kolumnerna till det då?

Skoluppgift, så vill helst bara göra det enligt uppgiften.

@Tobberoth, tack för hjälpen, det fungerade utmärkt, tolkat count funktionen fel innan bara

Löste som följande:

SELECT S, COUNT(P) as NrOfProducts FROM Deliveries GROUP BY S