Permalänk

Hjälp med SQL - sats!!

Hej! Försöker testa denna sats i vår skolas testprogram för SQL och får felmeddelande om att den inte går att köra
Frågan är: Ta fram kod, namn och pris på kurser som har hållits av minst tre OLIKA lärare!

Detta är databasen:

Min SQL-sats hittills:
SELECT K.kurskod, K.namn, K.pris
FROM Kurs AS K, Kurstillfälle AS Kt
WHERE K.kurskod=Kt.kurs

Hur gör jag för att endast selecta de här raderna när en kurs har tre olika lärarvärden?

Permalänk
Medlem
Skrivet av sallyfowlr:

Hej! Försöker testa denna sats i vår skolas testprogram för SQL och får felmeddelande om att den inte går att köra
Frågan är: Ta fram kod, namn och pris på kurser som har hållits av minst tre OLIKA lärare!

Detta är databasen:
https://sqltutor.dsv.su.se/prod/images/DatabaseSchema.bmp

Min SQL-sats hittills:
SELECT K.kurskod, K.namn, K.pris
FROM Kurs AS K, Kurstillfälle AS Kt
WHERE K.kurskod=Kt.kurs

Hur gör jag för att endast selecta de här raderna när en kurs har tre olika lärarvärden?

Vad får du för felmeddelande?

Visa signatur

NZXT H510 Flow MSI B450 Tomahawk MAX
AMD Ryzen 5800X3D RX 7900XTX Kingston Fury 64GB
LG C2 42" 4K@120Hz AOC Q27G2U 1440P@144Hz

Permalänk

Felmeddelande

@Pamudas:
Får felmeddelande när jag skriver

SELECT K.kurskod, K.namn, K.pris
FROM Kurs AS K, Kurstillfälle AS Kt
WHERE K.kurskod=Kt.kurs AND Kt.lärare>=3

vilket är "Er query kunde inte genomföras. Syntax fel"

Men om jag bara skriver

SELECT K.kurskod, K.namn, K.pris
FROM Kurs AS K, Kurstillfälle AS Kt
WHERE K.kurskod=Kt.kurs

Då får jag ju fram alla kurser med kurskod och pris men vill ju endast ha de som har haft tre olika lärare

Permalänk
Medlem
Skrivet av sallyfowlr:

@Pamudas:
Får felmeddelande när jag skriver

SELECT K.kurskod, K.namn, K.pris
FROM Kurs AS K, Kurstillfälle AS Kt
WHERE K.kurskod=Kt.kurs AND Kt.lärare>=3

vilket är "Er query kunde inte genomföras. Syntax fel"

Men om jag bara skriver

SELECT K.kurskod, K.namn, K.pris
FROM Kurs AS K, Kurstillfälle AS Kt
WHERE K.kurskod=Kt.kurs

Då får jag ju fram alla kurser med kurskod och pris men vill ju endast ha de som har haft tre olika lärare

Vad är Kurstillfälle.Lärare för datatyp och vad innehåller "lärare"?

Visa signatur

NZXT H510 Flow MSI B450 Tomahawk MAX
AMD Ryzen 5800X3D RX 7900XTX Kingston Fury 64GB
LG C2 42" 4K@120Hz AOC Q27G2U 1440P@144Hz

Permalänk
Medlem

Ser ut i diagrammet som att lärare är en egen tabell med 2 kolumner.

Du däremot skriver en query som antar att Kt.lärare är ett tal (som i ditt fal ska vara lika med eller större än 3) Du vill istället försöka räkna på hur många lärare (objektet) som matchar den fungerande queryn och utgå från dess antal

Ser nu också att i objektet lärare använder du personnumret som nyckel till Kt

Permalänk
Medlem

Är lärare i kurstillfälle en foreign key till personnummer i lärare? (Inte bra att ha personnummer som primärnyckel, men det är en annan fråga, blir dubbellagring av personnummer i så fall)

I så fall när du kollar Kt.lärare>=3 så kollar du om personnumret är mer än eller lika med 3. inte om det finns 3 eller fler kurstillfällen med läraren.

Visa signatur

Äsch...

Permalänk

Lärare innehåller ett personnummer så jag vill kontrollera att värdet på "lärare" för en kurs har minns tre olika värden... använder jag COUNT eller hur gör man då?

Permalänk

Aaa lärare i KT är en främmande tyckel till personnummer i lärare!

Permalänk
Avstängd

Testade lite.

CREATE TABLE Kurs (kurskod INT, namn VARCHAR(50), pris MONEY) CREATE TABLE Kurstillfälle (kurs INT, lärare NVARCHAR(200)) INSERT Kurs VALUES (1,'Data', 200),(2,'Matte',300) INSERT Kurstillfälle VALUES (1,'Kalle'),(2,'Pelle'),(2,'Olle'),(2,'Lasse') SELECT K.namn, k.pris FROM Kurs K JOIN Kurstillfälle Kt ON K.kurskod = Kt.kurs GROUP BY K.namn, K.pris HAVING COUNT(lärare) > 2

Permalänk
Skrivet av sallyfowlr:

Hej! Försöker testa denna sats i vår skolas testprogram för SQL och får felmeddelande om att den inte går att köra
Frågan är: Ta fram kod, namn och pris på kurser som har hållits av minst tre OLIKA lärare!

Detta är databasen:
https://sqltutor.dsv.su.se/prod/images/DatabaseSchema.bmp

Min SQL-sats hittills:
SELECT K.kurskod, K.namn, K.pris
FROM Kurs AS K, Kurstillfälle AS Kt
WHERE K.kurskod=Kt.kurs

Hur gör jag för att endast selecta de här raderna när en kurs har tre olika lärarvärden?

Tänkte fel återkommer

Visa signatur

Falta med sinc:en och se helheten

Permalänk

@snajk:

Testade och det gick inte så bra, syntaxen var fel och tror ej att satsen ska vara så lång.

Behöver bara få förklarat hur man på enklast sätt använder Count i huvudsatsen? För först skapar jag ju som sagt en vy sen vill jag bara räkna hur många lärare en viss kurs har och visa de kurser som haft mer än två lärare. Fattar inte hur jag inte kan förstå det här:(((

Permalänk
Medlem

Tycker snajks ser rätt ut och borde göra precis det du vill få fram förutom att kod saknas i SELECT.

Om du kollar upp ordningen på hur en query exekveras så tror jag det borde klarna för dig, testa sök på "sql order of execution" på Google så lär du hitta en hel del om det.

Skickades från m.sweclockers.com

Permalänk
Medlem
Skrivet av sallyfowlr:

@snajk:

Testade och det gick inte så bra, syntaxen var fel och tror ej att satsen ska vara så lång.

Behöver bara få förklarat hur man på enklast sätt använder Count i huvudsatsen? För först skapar jag ju som sagt en vy sen vill jag bara räkna hur många lärare en viss kurs har och visa de kurser som haft mer än två lärare. Fattar inte hur jag inte kan förstå det här:(((

Om kravet är 3 OLIKA lärare bör det bli något i denna stil, distinct gör så att den inte räknar dubletter.

SELECT k.kurskod, k.namn, k.pris FROM Kurs k JOIN Kurstillfälle kt ON kt.kurs = k.kurskod GROUP BY k.kurskod, k.namn, k.pris HAVING COUNT(DISTINCT kt.lärare) >= 3

Ett tag sen jag skrev SQL, och ser inte exakt hur datan ser ut och vad som är PK/FK, lite otydligt i bilden.
Men jag antar att kurs och kurskod länkar tabellerna. Och att varje lärare representeras av ett personnummer bara?

Permalänk
Avstängd
Skrivet av sallyfowlr:

@snajk:

Testade och det gick inte så bra, syntaxen var fel och tror ej att satsen ska vara så lång.

Behöver bara få förklarat hur man på enklast sätt använder Count i huvudsatsen? För först skapar jag ju som sagt en vy sen vill jag bara räkna hur många lärare en viss kurs har och visa de kurser som haft mer än två lärare. Fattar inte hur jag inte kan förstå det här:(((

Som Zaibuf säger så bör du ha med DISTINCT om det är distinkta lärare det handlar om. Annars är det så du får göra. GROUP BY allt som du ska ha med i SELECT, sen HAVING COUNT(x) > y. Ett problem med din grundsats är att du inte joinar tabellerna mot varandra.