Wij onderbreken deze thread voor reclame:
http://kalders.be
1
2
3
| select distinct ID from T t1 where not exists (select * from T t2 where t2.ID = t1.ID and prop is null) |
of heel vies zoiets:
1
2
3
4
| select ID from T group by ID having count(*) = sum(case when Prop is null then 0 else 1 end) |
Ik snap iig niet wat er tegen subqueries zou zijn?
[ Voor 11% gewijzigd door ACM op 07-11-2006 16:51 ]
1
2
3
4
| SELECT DISTINCT P1.id FROM PropTable p1 LEFT OUTER JOIN #PropTable p2 ON P1.Id = P2.Id AND P2.Prop IS NULL WHERE P2.Id IS NULL |
Je JOINed de tabel met zichzelf waarbij je expliciet ook de voorwaarde opneemt dat Prop NULL is, alle records die niet aan deze join criteria voldoen heb jij nodig.
Volgens mij moet dit werken
Oops! Google Chrome could not find www.rijks%20museum.nl
Nou, op zich is er niets tegen subqueries, maar de select waar ik tegenaan kijk is het resultaat van een redelijk omvangrijke join. Ik kan het in een tijdelijke tabel gaan stoppen, of het in een subquery nog eens uitvoeren, maar als het niet hoeft, liever niet dus.ACM schreef op dinsdag 07 november 2006 @ 16:48:
Ik snap iig niet wat er tegen subqueries zou zijn?
Maar los daarvan bedacht ik me net het volgende:
1
2
3
4
| select * from T group by ID having count(Prop) = count(*) |
Wij onderbreken deze thread voor reclame:
http://kalders.be
Verwijderd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
| create table #temp (i int , b varchar(200)) go insert #temp values (1, 'A') insert #temp values (1, 'B') insert #temp values (1, null) insert #temp values (2, 'A') insert #temp values (3, 'A') insert #temp values (3, 'B') SELECT * FROM #temp SELECT DISTINCT t1.i FROM #temp t1 LEFT JOIN ( SELECT DISTINCT t1.i FROM #temp t1 INNER JOIN #temp t2 ON t1.i = t2.i WHERE t2.b IS NULL ) t2 ON t1.i = t2.i WHERE t2.i is null DROP table #temp |
Wat natuurlijk niet werkt, want Prop komt niet voor in de Group By...GrimaceODespair schreef op dinsdag 07 november 2006 @ 16:55:
[...]
Maar los daarvan bedacht ik me net het volgende:
SQL:
1 2 3 4 select * from T group by ID having count(Prop) = count(*)
zie oisyn hieronder...
[ Voor 4% gewijzigd door GrimaceODespair op 07-11-2006 17:17 ]
Wij onderbreken deze thread voor reclame:
http://kalders.be
1
2
3
4
| select * from T group by ID having sum(Prop is null) = 0 |
Je gebruikt ook niet Prop maar een aggregate functie die op Prop werkt, wat uiteraard wel magGrimaceODespair schreef op dinsdag 07 november 2006 @ 17:04:
[...]
Wat natuurlijk niet werkt, want Prop komt niet voor in de Group By...
[ Voor 131% gewijzigd door .oisyn op 07-11-2006 17:16 ]
Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.
Iets van:
1
2
3
4
5
6
7
| SELECT id FROM t GROUP BY id EXCEPT SELECT id FROM t WHERE prop IS NULL |
(Even uit het blote hoofd ingeklopt)
Fat Pizza's pizza, they are big and they are cheezy
Je hebt natuurlijk helemaal gelijk.oisyn schreef op dinsdag 07 november 2006 @ 17:09:
SQL:
1 2 3 4 select * from T group by ID having sum(Prop is null) = 0
[...]
Sinds wanneer mag je alleen kolommen in de HAVING clause gebruiken die in de GROUP BY clause voorkomen. Volgens mij ben je in de war met de regel dat je alleen kolommen in de SELECT clause mag gebruiken die in de GROUP BY voorkomen, tenzij je er een aggregate functie op los laat.
Wij onderbreken deze thread voor reclame:
http://kalders.be
Meer iets voor een decode denk ikJKVA schreef op dinsdag 07 november 2006 @ 17:13:
Is dit niet een mooi geval voor een EXCEPT? Of MINOR voor Oraclezen?
1
2
3
4
| select ID from T group by ID having sum(decode(Prop, NULL, 1, 0)) = 0 |
Neem je whisky mee, is het te weinig... *zucht*
Wij onderbreken deze thread voor reclame:
http://kalders.be