Två tabeller; den första innerhåller artiklar (i exemplet visat som bokstäver), den andra innehåller underartiklar (i exemplet visat som siffror). Tabellerna är joinade genom att varje underartikel håller reda på sin artikel. Nedan ser vi relationerna hos tre artiklar. Artikel A innehåller alltså underartiklar 1, 2 och 3, artikel B innehåller 2 och 3, och C innehåller 1 och 3. Hej! Tack Håkan. Så enkelt var det alltså. Missade att villkoret skulle in i JOIN istället för i WHERE. Det hade gått utmärkt att lägga villkoret <b>(AND b.artikelnummer <> 1)</b> i WHERE-satsen också. Hmm... vid närmare eftersyn visar det sig att det inte var rätt svar ändå. Nu blir resultatet: Jahhhaaaa... Trolien inte det bästa och effektivaste/snyggaste sättet att göra det på men detta borde fungera. Njjaaa Thomas. Nja Håkan, min variant skall ta alla artiklar där artikeln inte har en underartikel med artikelnummer 1. Om du tittar på vad som efterfrågas är det så att alla artiklar som har en underartikel med artikelnummer 1 INTE skall tas med. Din variant lämnar bort alla rader där underartikelns artikelnummr är 1 men lämnar kvar alla artiklar. Han vill ha ut artikel B från A B och C eftersom A har underartiklarna 1, 2 och 3, B har inte ett och C har 1 och 3. <code> Jag fattade frågan fel först, och gav ett nytt förslag. EDIT: Idag läser jag visst bara fort och fel... :-(SQL-fråga
A-1
A-2
A-3
B-2
B-3
C-1
C-3
Nu vill jag hämta de artiklar som INTE innehåller underartikel 1 (alltså ska bara B hämtas). Hur ser SQL-frågan ut då?Sv: SQL-fråga
Ett förslag:SELECT a.artikelnamn, b.artikelnummer FROM artiklar a
INNER JOIN underartiklar b ON b.id = a.id AND b.artikelnummer <> 1
//Håkan
Sv:SQL-fråga
Sv: SQL-fråga
En ren smaksak.
//HåkanSv:SQL-fråga
A-2
A-3
B-2
B-3
C-3
Det enda som plockas bort är posterna med 1. Alltså hämtas även artiklarna A och C fast de innehåller underartikel 1. Vad jag vill ha är bara resultatet:
BSv: SQL-fråga
Vi gör ett nytt fösök.
<code>SELECT CASE b.artikelnummer WHEN 1 THEN a.artikelnamn
ELSE a.artikelnamn + '-' + b.artikelnummer END FROM artiklar a
INNER JOIN underartiklar b ON b.id = a.id</code>
Om artikelnummer är t.ex. en int får du göra en CAST
//HåkanSv: SQL-fråga
<code>
SELECT a.artikelnamn, b.artikelnummer FROM artiklar a
INNER JOIN underartiklar b ON b.id = a.id
WHERE a.artikelnamn NOT IN
(SELECT a.artikelnamn FROM artiklar a
INNER JOIN underartiklar b ON b.id = a.id
WHERE b.artikelnummer = 1)
</code>Sv:SQL-fråga
Du har nog bara gjort en variant av mitt tidigare svar.
EDIT: kan ha läst fort och fel, strunt a i detta i såfall.
//HåkanSv: SQL-fråga
Sv: SQL-fråga
SELECT a.artikelnamn, b.artikelnummer
FROM artiklar a inner join underartiklar b
ON b.id = a.id
WHERE NOT exists
(SELECT *
from underartiklar ua
where ua.id = a.id
and ua.artikelnummer = 1)
</code>Sv:SQL-fråga
I ditt förslag så får han ju inte med artikelnamnet när artikelnumret är 1.
Vilket visade sig senare vara det han ville.
//HåkanSv:SQL-fråga
Jag har helt missat frågeställningen, och givit svar på något helt annat.
Mats och Thomas kan bortse från allt som jag skrivit i tråden, bara att ta hâlja istället.
PS: Håller med Lars Berg <b>EXISTS</b> ger bättre prestanda än att använda <b>IN</b> DS.
//Håkan