Strona 1 z 1

SQL - kontrahenci z wartością atrybutu

: 18 cze 2018, 09:29
autor: PlacekJ
Witam

Od ponad 10 lat nie używam SQL-a i mam problem z zapytaniem.
Potrzebuję pobrać KntKarty z wartością jednego atrybutu o nazwie ZEWNID. Jeśli KntKarty nie ma atrybutu to ma być w wyniku z pustą wartością atrybutu ZEWNID.

Takie zapytanie zwraca oczywiście tylko kontrahenta, który ma atrybut i wartość

Kod: Zaznacz cały

SELECT        CDN.KntKarty.*,  CDN.Atrybuty.Atr_Wartosc as ZewnId
FROM            
CDN.KntKarty 
inner join CDN.Atrybuty ON CDN.KntKarty.Knt_GIDNumer = CDN.Atrybuty.Atr_ObiNumer
inner join CDN.AtrybutyKlasy ON CDN.Atrybuty.Atr_AtkId = CDN.AtrybutyKlasy.AtK_ID 
                         
WHERE        (CDN.AtrybutyKlasy.AtK_Nazwa = 'ZEWNID') 

Re: SQL - kontrahenci z wartością atrybutu

: 18 cze 2018, 10:22
autor: tomasz.kozakiewicz
Witam
Bardziej wydajnie będzie z użyciem Id atrybutu.

SELECT CDN.KntKarty.*,
Atr_Wartosc as ZewnId
FROM
CDN.KntKarty
LEFT join CDN.Atrybuty ON Knt_GIDNumer = Atr_ObiNumer and Atr_AtkId=*Id klasy atrybutu*


I oczywiście jak ma być zwrócony wynika atrybutu lub null to nie może być inner join tylko left . Można też użyć podzapytania.

Re: SQL - kontrahenci z wartością atrybutu

: 18 cze 2018, 12:55
autor: PlacekJ
Dzięki
Ostatecznie dodałem selecta bo chcę się odwoływać do nazwy atrybutu . Rozumiem, że to miałeś na myśli pisząc o możliwości użycia podzapytania.

Kod: Zaznacz cały

SELECT K.*, 
A.Atr_Wartosc as ZewnId
FROM 
CDN.KntKarty as K
LEFT join CDN.Atrybuty as A ON Knt_GIDNumer = Atr_ObiNumer and Atr_AtkId = (select AtK_ID from CDN.AtrybutyKlasy where AtK_Nazwa = 'ZewnId')

Re: SQL - kontrahenci z wartością atrybutu

: 19 cze 2018, 09:21
autor: tomasz.kozakiewicz
SELECT CDN.KntKarty.*,
(SELECT TOP 1 Atr_Wartosc FROM CDN.Atrybuty JOIN CDN.AtrybutyKlasy ON
Atr_AtkId=Atk_id WHERE
Atr_ObiTyp=Knt_GidTyp AND Atr_ObiNumer=Knt_GidNumer AND
Atk_Nazwa='ZewnId'
) as ZewnId
FROM
CDN.KntKarty


Oczywiście tylko dla tego przypadku, bo atrybuty mogą być wielowartościowe i takie zapytanie nie zda egzaminu. Możesz jeszcze obudować podzapytanie ISNULL.

Re: SQL - kontrahenci z wartością atrybutu

: 19 cze 2018, 15:26
autor: PlacekJ
Ponownie dzięki :)
Chyba nie ma na tym forum żadnych punktowych podziękowań?