Autor Zpráva
matak
Profil
Nevím jak lépe to napsat, ale představte si tabulku

id value
1 5
2 10
3 6
4 80
5 90
1 6
1 80
2 50
2 5

a potřebuji zjistit jednotlivá id jehož řádky ve value nabývají 5,6 např.

tedy tady je např. jiné zobrazení
1 5
6
80
2 10
50
5
3 6
4 80
5 90

mojí podmínce vyhovuje jen id=1, má hodnoty 5 a 6

možná je to blbost ale z přetáhnutí to tam nevidím

díky
matak
Profil
jediné na co jsem přišel je tohle, ale vůbec netuším jestli je to správně nebo se to dá dělat lépe

SELECT DISTINCT id FROM table GROUP BY id, value='5', value='6'
Kcko
Profil
SELECT id, COUNT(id) pocet 
FROM table 
WHERE value IN (5,6)
GROUP BY id HAVING pocet = 2  /* pocet dopocitavame dynamicky podle poctu hodnot = value, trebas v PHP */
TomášK
Profil
Ten dotaz je takový divný :)
- Používáš GROUP BY na něco jiného než je určeno - tipuju, že v tom nemáš jasno
- value='5' porovnáná číslo (předpokládám, že VALUE je INT) s řetězcem (sice to funguje, ale musí přetypovávat), lepší je value=5

Kcko
Pokud správně rozumím zadání, tak by tvůj dotaz nefungoval na:
1 5
1 5
1 6
Doplnil bych ho ještě o DISTINCT:
SELECT id, COUNT(DISTINCT id) pocet 
FROM table 
WHERE value IN (5,6)
GROUP BY id HAVING pocet = 2 
tiso
Profil
TomášK - DISTINCT? tak si to teraz vyskúšaj čo to robí...
matak
Profil
souhlasím že kcko má lepší řešení, sic moje funguje taky, ale proto to sem píšu, že se mi nezdálo,

u kcko je DISTINCT v mém případě zbytečný, id a value jsou primární klíče
tiso
Profil
matak - s DISTINCT to nefunguje, a primárny kľúč môžeš mať v jednej tabuľke len jeden...
matak
Profil
(id, value) je primární klíč, hlavně že si rozumíme o čem mluvíme, tedy nemůže se vyskytnout duplicitní pár id a value, tudíž jsem ani DISTINCT u řešení kcko nezkoušel
Kajman_
Profil *
Kdyby to nebyl unikátní klíč, tak to řeší count(distinct value).
tiso
Profil
matak - jedna vec je rozumieť si, druhá správne sa vyjadrovať...
TomášK
Profil
Uznávám chybu, má tam být value místo id, jak píše Kajman. A že to je zbytečné, pokud je (id,value) klíč, jak říkají další. Je by mě zajímalo, jestli opravdu mohl fungovat původní dotaz:
SELECT DISTINCT id FROM table GROUP BY id, value='5', value='6'

Rozdělí to do skupin
1, 5 => 1, 1, 0
1, 6 => 1, 0, 1
2, 5 => 2, 1, 0
3, 6 => 3, 0, 1
4, 10 => 4, 0, 0
4, 11 => 4, 0, 0
tedy poslední dva záznamy dá do stejné skupiny a DISTINCT z toho vezme různé id, tedy bych čekal, že výsledek bude 1,2,3,4 a dotaz fungovat nebude. Nebo mi zas někde něco uniká?
Kajman_
Profil *
TomášK
Touhle cestou to nepůjde. Leda by se to celé obalovalo, dalo další group by na id a havingem testovalo, že max obou sloupečků je 1. Ale výkonější bude již dříve zmíněné řešení.

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:

0