两个选择语句变为一个

时间:2017-10-26 08:40:47

标签: sql sql-server

我有两个查询。在第一个查询中,如果与第二个查询分开,我得到了很好的结果。

第一次查询

SELECT * 
FROM 
(
     SELECT nks.[Id] 
     , nks.[IdNarudzbe]
     , nks.[IdArtikla] as artikal
     , nks.[IdUsluge]
     , nks.[Naziv]
     , nks.Kolicina
    , p.Naziv as kupac
    , p.Id as kupacId
    , p.Adresa
    , p.Telefon
    , nkz.[BrojDokumenta] AS nalog
    , nkz.[BrojDokumentaKroz] AS nalogKroz
    , nkz.[RokIsporuke]
    , nkz.[IdNastaloOdDokumenta]
    , d.Naziv as drzava
    FROM [dbo].[NarudzbaKupacaStavke] nks
    LEFT JOIN [dbo].[NarudzbeKupacaZaglavlje] nkz
        ON nkz.Id = nks.IdNarudzbe                            
    LEFT JOIN dbo.Partneri p
        ON nkz.IdKupac = p.Id
    LEFT JOIN dbo.Drzave d 
        ON p.IdDrzava = d.Id
    WHERE idArtikla IN ('FP80PUR-08', 'FP80PUR-09', 'FP80PUR-12') 
    AND nkz.[VrstaDokumenta] = 'PRO' 
    AND nkz.StatusArhive = 0 

    --... 

来自第一个查询nkz。[IdNastaloOdDokumenta]对第二个重要

SELECT BrojDokumenta
, BrojDokumentaKroz 
FROM .[dbo].[NarudzbeKupacaZaglavlje]
where id = nkz.[IdNastaloOdDokumenta]

对于前。在第一个查询中,我得到了nkz.[IdNastaloOdDokumenta] = 20。我在where语句的第二个查询中使用的数字20,以及从BrojDokumenta得到的值,我想加入第一个查询。 我想知道是否可以从这两个中查询一个。我想我不能联合运算符,因为这两个查询的列数不匹配。

1 个答案:

答案 0 :(得分:0)

enter image description here

第一个查询中已存在相同的表和相同的列。也许你想要一个自我加入,像这样:

FROM [dbo].[NarudzbaKupacaStavke] nks
LEFT JOIN [dbo].[NarudzbeKupacaZaglavlje] nkz
    ON nkz.Id = nks.IdNarudzbe 

    LEFT JOIN [dbo].[NarudzbeKupacaZaglavlje] nkz2
        ON nkz2.Id = nkz.[IdNastaloOdDokumenta] 

LEFT JOIN dbo.Partneri p
    ON nkz.IdKupac = p.Id
LEFT JOIN dbo.Drzave d 
    ON p.IdDrzava = d.Id
WHERE idArtikla IN ('FP80PUR-08', 'FP80PUR-09', 'FP80PUR-12') 
AND nkz.[VrstaDokumenta] = 'PRO' 
AND nkz.StatusArhive = 0