Toon posts:

[SQL] Alle vragen ophalen waarop nog niet geantwoord is.

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hallo,
de titel is misschien een beetje vaa, maar kon zo niks anders verzinnen.

Ik heb een tabel vragen en een tabel antwoorden,
nu wil ik alle vragen ophalen waarop een gebruikt nog niet op heeft geantwoord.

Alle vragen waarop geantwoord is, is al gelukt, meet een inner join.
Maar kan ik die join ook omdraaien? Zodat ik iets krijg van
Alle vragen waar GEEN record voorkomt in de tabel antwoorden (die gekoppeld is met vragen) voor gebruiker X.

Weet iemand hoe ik dit op een nette manier kan oplossen?

  • Varienaja
  • Registratie: Februari 2001
  • Laatst online: 14-06-2025

Varienaja

Wie dit leest is gek.

select v.vraagID from vragen v
where not exists (select a.vraagID from antwoorden a where v.vraagID=a.vraagID)

Siditamentis astuentis pactum.


  • kenneth
  • Registratie: September 2001
  • Niet online

kenneth

achter de duinen

En:

SQL:
1
2
SELECT v.vraagID FROM vragen v LEFT JOIN antwoorden a ON v.vraagID = a.vraagID
WHERE a.vraagID IS NULL

Als je het per sé zonder subselect wil doen ;)

Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.


  • intGod
  • Registratie: Maart 2003
  • Niet online

intGod

Ars non postulat causam

Kenneth heeft de beste ooplossing :) Subselects werken vertragend en zijn processor-intensief (en resulteren in een overbodige tabel of indexscan).

  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

intGod schreef op 12 mei 2003 @ 12:31:
Kenneth heeft de beste ooplossing :) Subselects werken vertragend en zijn processor-intensief (en resulteren in een overbodige tabel of indexscan).
Dat hoeft niet altijd zo te zijn.
Het is zwaar afhankelijk van het dbms, en met name dan de query-optimizer, welke je gebruikt.

Who is John Galt?


  • VisionMaster
  • Registratie: Juni 2001
  • Laatst online: 18-07 20:32

VisionMaster

Security!

outer join ?

I've visited the Mothership @ Cupertino


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Select vragen.* From vragen Left Join antwoorden Group By vragen.id, ... Having Count(antwoorden.id) = 0;

zoiets? :)
intGod schreef op 12 May 2003 @ 12:31:
Kenneth heeft de beste ooplossing :) Subselects werken vertragend en zijn processor-intensief (en resulteren in een overbodige tabel of indexscan).
Zelfs Postgres kent al de mogelijkheid om subselects dusdanig te optimaliseren dat ze bijvoorbeeld maar eenmalig gedaan worden en het resultaat hergebruikt.

[ Voor 63% gewijzigd door ACM op 12-05-2003 14:39 ]


Verwijderd

Topicstarter
Ik heb het opgelost met een subselect,
ik kreeg het namelijk niet voor elkaar, omdat ik ook nog moet controleren op gebruikersid van het antwoord.

  • Varienaja
  • Registratie: Februari 2001
  • Laatst online: 14-06-2025

Varienaja

Wie dit leest is gek.

intGod schreef op 12 May 2003 @ 12:31:
Kenneth heeft de beste ooplossing :) Subselects werken vertragend en zijn processor-intensief (en resulteren in een overbodige tabel of indexscan).
NOT IN werkt inderdaad bijzonder kut, maar NOT EXISTS gaat vliegensvlug op m'n Oracle-servertje

Siditamentis astuentis pactum.


  • intGod
  • Registratie: Maart 2003
  • Niet online

intGod

Ars non postulat causam

NOT EXISTS is inderdaad een supersnelle ;) Die doet het ook op MsSql heeeeel erg goed.

En die oplossing met die aggregates is al helemaal niet lekker! Je gaat toch geen aggregates gebruiken als je het met een join en een where kan oplossen?
Pagina: 1