Autor Zpráva
stepanka
Profil *
Ahoj,

uměl by mi prosím někdo poradit?

Mám dvě tabulky:
prijemky
id  
1
2
3

prijemky_detail
id  id_prijemky  sklad
1  1  -5
2  1  -8
3  1  -3
4  1  -6
5  1  -4
6  1  -1
7  1  -2
8  2  -8
9  2  -3
10  2  4
11  2  1
12  3  5
12  3  2

A potřebovala bych vybrat jen ty příjemky (z první tabulky), které mají v detailu (druhá tabulka) všechny sklady záporné. V tomto případě by to byla pouze příjemka s ID=1.
Sepsala jsem toto:

SELECT 
SQL_CALC_FOUND_ROWS p.*, 
p.* 
FROM prijemky p
WHERE p.id NOT IN (SELECT d.id_prijemky FROM prijemky_detail d WHERE d.sklad < 0)
GROUP BY p.id
ORDER BY id DESC 

A zkouším to různě upravovat, ale nevrací to správné výsledky. Už nevím, jak to změnit více, neuměl by mi někdo pomoct? Moc děkuju!
peta
Profil
SELECT b.id
FROM prijemky_detail a
  LEFT JOIN prijemky b ON b.id=a.id_prijemky
WHERE a.sklad<0
ORDER BY b.id DESC 
Za predpokladu, ze jsou v detail tabulce id jen z tabulky prijemky a ne treba dalsich dvou tabulek.
stepanka
Profil *
peta:
Tohle nefunguje, ale děkuju. Vypíše to seznam těch detailů, ne seznam příjemek, což je špatně.
peta
Profil
Jsem to pak jeste asi 4 min upravoval, jsem mel prehozene promenne z a, b. Jestli jsi treba nepouzila starsi verzi.
Aha, jo, ty tam mas pro jedno b.id duplicity.
Kajman
Profil
Třeba takto
SELECT id_prijemky
FROM   prijemky_detail
GROUP  BY id_prijemky
HAVING Count(*) = Sum(sklad < 0) 

Nebo jednodušeji
HAVING Max(sklad) < 0
stepanka
Profil *
peta:
Moc díky, ale ani tak mi Tvé řešení nefunguje, to jsem zkoušela hned mezi prvníma ještě sama, ale vybírá to i záznamy, kde se vyskytuje plusový sklad.

Kajman:
Tohle je ono :-) Mockrát děkuju! Funguje dobře. Potřebuju pak vybírat ještě ty příjemky, kde jsou sklady pouze plusové, na to jsem přišla:
HAVING MIN(sklad) > 0
a jako poslední věc potřebuju vybírat sklady, kde je kombinace kladných a záporných skladů. To se mi ale nedaří. Bylo by složité to upravit?
Kajman
Profil
stepanka:
kde je kombinace kladných a záporných skladů

HAVING Min(sklad) < 0 AND Max(sklad) > 0

S tím, že ty příjemky, které nemají nenulový (žádný nebo rovný 0) sklad nebudou ve výsledku ze žádného ze tří dotazů.
stepanka
Profil *
Kajman:
Aha, takto, to jsem zkoušela taky, akorát jsem opakovala i to "having". Super, mockrát děkuju, moc jsi mi pomohl.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: