Jak wstawić operator OR do zapytania SQL?

0

Witam, mam takie zapytanie do bazy MSSQL:

SELECT sum(DPR.ob_Ilosc) as ilosc,tw_Symbol,tw_Nazwa,tw_Id,DDR.dok_Typ 
FROM tw__Towar,dok_Pozycja DPR,vdok__Dokument DDR                            
where DPR.ob_DokMagId=DDR.dok_Id and DPR.ob_TowId=tw_Id and DDR.dok_DataWyst<='2021-10-31' and
 **DDR.dok_Typ=11 OR DDR.dok_Typ=13 OR DDR.dok_Typ=9**
group by tw_Symbol,tw_Nazwa,tw_Id,DDR.dok_Typ

Nie działa mi OR, jak ustawiam dok_Typ=11 to wyciąga szybko rekordy ale jak dodam te dwa or to zapętla się, mieli i nic nie wyciąga żadnego rekordu.
Dlaczego? Gdzie zrobiłem błąd? Jak powinno być prawidłowo?

5

Użyj nawiasów?

[...] and (DDR.dok_Typ=11 OR DDR.dok_Typ=13 OR DDR.dok_Typ=9)

4

Może ci chodzi o kolejność operatorów. AND ma pierwszeństwo przed** OR**, więc twoje zapytanie jest efektywnie takie:

SELECT sum(DPR.ob_Ilosc) as ilosc,tw_Symbol,tw_Nazwa,tw_Id,DDR.dok_Typ
FROM tw__Towar,dok_Pozycja DPR,vdok__Dokument DDR
where (DPR.ob_DokMagId=DDR.dok_Id and DPR.ob_TowId=tw_Id and DDR.dok_DataWyst<='2021-10-31' and
DDR.dok_Typ=11) OR DDR.dok_Typ=13 OR DDR.dok_Typ=9
group by tw_Symbol,tw_Nazwa,tw_Id,DDR.dok_Typ

A pewnie wolałbyś takie:

SELECT sum(DPR.ob_Ilosc) as ilosc,tw_Symbol,tw_Nazwa,tw_Id,DDR.dok_Typ
FROM tw__Towar,dok_Pozycja DPR,vdok__Dokument DDR
where DPR.ob_DokMagId=DDR.dok_Id and DPR.ob_TowId=tw_Id and DDR.dok_DataWyst<='2021-10-31' and
(DDR.dok_Typ=11 OR DDR.dok_Typ=13 OR DDR.dok_Typ=9)
group by tw_Symbol,tw_Nazwa,tw_Id,DDR.dok_Typ

https://dev.mysql.com/doc/refman/8.0/en/operator-precedence.html

0

dzięki, jest ok, rzeczywiście nawias pomógł

4

Hej,

wiem że temat rozwiązany ale w takich wypadkach to najlepsza opcja jest IN

SELECT sum(DPR.ob_Ilosc) as ilosc,tw_Symbol,tw_Nazwa,tw_Id,DDR.dok_Typ
FROM tw__Towar,dok_Pozycja DPR,vdok__Dokument DDR
where DPR.ob_DokMagId=DDR.dok_Id and DPR.ob_TowId=tw_Id and DDR.dok_DataWyst<='2021-10-31' and 
DDR.dok_Typ IN (11,13,9)
group by tw_Symbol,tw_Nazwa,tw_Id,DDR.dok_Typ

1 użytkowników online, w tym zalogowanych: 0, gości: 1