Konstig rubrik kanske, och jag ber om ursäkt om jag är en dålig sökare men jag har verkligen inte hittat nåt och jag tror mitt problem är jäkligt lätt om man vet hur man gör. Min SQL-sats ser ut så här för tillfället:
SELECT
produkt.produktnamn,
produkt.produktID,
produkt.pris,
produkt.bild,
produkt.beskrivning,
produkt.produktgruppID
FROM
produkt,
produktamnen
WHERE
produkt.lager > 0 AND
produkt.produktgruppID = 4 AND
produktamnen.amneID = 1 AND
produktamnen.produktID = produkt.produktID
ORDER BY
produkt.produktnamn,
produkt.produktID
DESC;
Nu vill jag köra precis den här satsen och hämta fram alla de här fälten men på villkor att fältet 'produktnamn' är DISTINCT. Hur göra? Har testat nästlade SELECT-satser och GROUP BY mm men jag får inte till det. :(
Tack för svaret! :)
Men vad är det du gör, vad är 'p' för nåt? Jag får inget felmeddelande men inga fält plockas fram, tyvärr. Glömde säga att jag kör MS Access.
p är ett godtyckligt namn som används för att skilja de olika instanserna av produkttabellen.
Att du använder Access skall inte innebära något för den frågan. Kan du visa hela frågan?
SELECT
produkt.produktnamn,
produkt.produktID,
produkt.pris,
produkt.bild,
produkt.beskrivning,
produkt.produktgruppID
FROM
produkt,
produktIDinnehallgruppID
WHERE
produkt.lager > 0 AND
produkt.produktgruppID = 4 AND
produktIDinnehallgruppID.produktinnehallgruppID = 1 AND
produktIDinnehallgruppID.produktID = produkt.produktID AND NOT EXISTS
(SELECT *
FROM produkt p
WHERE p.produktnamn = produkt.produktnamn
AND p.produktid <> produkt.produktid)
ORDER BY
produkt.produktnamn,
produkt.produktID
DESC;
Det här är dom riktiga fältnamnen, det är inte jag som byggt databasen, den ser bedrövlig ut. Normalisering är på g, men vi tar en sak i taget. ;)
Ledsen att det tagit tid att svara, jag var tvungen att resa bort ett par dagar.
När jag kör ovanstående SQL-sats får jag fram alla mina produktnamn unika samt en post till som heter 'Expr1001' som består av ettor, så här:
Det där var för att testa att det finns produktnamn som är unika.
Alltså, det finns produktnamn som är unika men inga som uppfyller resten av de villkor som du anger.
SELECT
produkt.produktnamn
FROM
produkt,
produktIDinnehallgruppID
WHERE
produkt.lager > 0 AND
produkt.produktgruppID = 4 AND
produktIDinnehallgruppID.produktinnehallgruppID = 1 AND
produktIDinnehallgruppID.produktID = produkt.produktID
group by produkt.produktnamn
having count(*) = 1
select produktnamn,count(*) from produkt group by produktnamn having count(*) = 1
...är följande produkter:
produkt2
produkt4
Den verkar alltså helt utesluta de produkter det finns fler än en av. Låter det rimligt? Jag är ganska förvirrad måste jag tillstå, och hänger inte riktigt med på hur HAVING och EXISTS fungerar :r
Ja, det undgår mitt förstånd hur jag ska göra. Jag försöker spalta upp mitt problem en gång till för att klargöra. Jag har två tabeller som ser ut ungefär så här:
Det jag vill få fram är alltså ett resultat där t ex ...
produkt.produktgruppID = 4 AND
produktIDinnehallgruppID.produktinnehallgruppID = 1 AND
produkt.lager > 0
...men på villkor att produkt.produktnamn är unikt och produktID är unikt. produkt.produktID är alltså PRIMARY KEY men produktIDinnehallgruppID.produktID är inte unikt i tabellen. Hur göra?
Tack på förhand!
298 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e