Trebam pomoc za pravljenje query-ja

sa query-jem

select distinct organization_id, item_id
from orderss
where item_id in (101, 304)
order by org_id asc

dobijam ovaj rezultat

org_id item_id
8200 101
9016 304
9183 101
9971 101
10035 304
10248 101
10249 101
10249 304
10294 101
11158 101
11334 101
11369 101
11883 101
11907 101
11911 101
11914 101
11916 101
11967 101
17358 101
17437 101
17442 101
17682 101
18002 101

znaci, bilo koja org koja je “kupila” item 101 ili 304 bice na spisku.

ja trebam query kojim cu dobiti spisak orgs koji su kupili i 101 i 304 (oba item-a). rezultat je 10249.

pomagajte!

SELECT o.organization_id FROM orderss AS o WHERE (SELECT COUNT(*) FROM orderss AS o1 WHERE o1.organization_id=o.organization_id AND (o1.item_id=101 OR o1.item_id=304) )=2
Ovo je pod pretpostavkom da je par organization_id+item_id markiran kao UNIQUE odnosno ne može se ponavljati. Ako se može ponavljati onda bi trebala dva podupita.

Savjet: podupiti su spori i treba ih izbjegaviti gdje god je moguće.

[quote=vedran]SELECT o.organization_id FROM orderss AS o WHERE (SELECT COUNT(*) FROM orderss AS o1 WHERE o1.organization_id=o.organization_id AND (o1.item_id=101 OR o1.item_id=304) )=2
Ovo je pod pretpostavkom da je par organization_id+item_id markiran kao UNIQUE odnosno ne može se ponavljati. Ako se može ponavljati onda bi trebala dva podupita.

Savjet: podupiti su spori i treba ih izbjegaviti gdje god je moguće.[/quote]
par organization_id i item_id nisu unique :frowning:

ovo mi daje korektan rezultat ali moram jos testirati

select r.organization_id from ( select distinct o.organization_id, o.item_id from orders o where o.instance_id=12 and o.item_id in (101, 304) order by o.organization_id asc ) r group by organization_id having count(*) >= 2
:smiley:

Probaj ovako:

SELECT t1.org_id FROM tbl AS t1 INNER JOIN tbl AS t2 ON t1.org_id = t2.org_id AND t1.item=101 AND t2.item=304;
Ovi AS nisu obavezni, tako da mozes pisati organisations t1 ili kako se vec zove ti primarna tabela.

[quote=adioe3]Probaj ovako:

SELECT t1.org_id FROM tbl AS t1 INNER JOIN tbl AS t2 ON t1.org_id = t2.org_id AND t1.item=101 AND t2.item=304;
Ovi AS nisu obavezni, tako da mozes pisati organisations t1 ili kako se vec zove ti primarna tabela.[/quote]
posto org_id i item_id kao par se mogu biti vise od jedanput (nisu unique) moram koristiti distinct funkciju. to je razlog zasto imam sub-query.

zanimljiva stranica. moze biti dobra pomoc.

http://www.artfulsoftware.com/infotree/queries.php

@afan: Jesi li probao opalit ovaj moj query? Ja sam ga testirao sa ovim podacima koje si ti dao i vraca TACNO ono sto tebi treba i to bez koristenja DISTINCT (ergo, nema temporary tabele ergo radi brze)…