[SQL] traag SELECT (SELECT prijs FROM...) AS prijs1 FROM...

Pagina: 1
Acties:

  • GC-Martijn
  • Registratie: September 2004
  • Laatst online: 09-12-2018
Hoi,


Ik heb de volgende al gevraagd op een ander forum maar nog steeds geen goed antwoord gekregen.

De onderstaande query werkt en krijg de data zoals ik hem wil hebben.
het is alleen super traag. 9656 ms voor 7057 rijen. dit is ook wel logisch omdat de query meerdere selects gebruikt.

Mijn vraag is dan ook of er een alternatief is voor de onderstaande query.

SELECT d.debnr,d.maanden,d.nawgegevens...,
(SELECT k.prijs FROM kosten AS k WHERE k.what=1 AND did=d.did) AS prijs1,
(SELECT k.prijs FROM kosten AS k WHERE k.what=2 AND did=d.did) AS prijs2,
(SELECT k.prijs FROM kosten AS k WHERE k.what=3 AND did=d.did) AS prijs3
FROM tabelX AS d

---------
een inner join ook al iets mee getest maar dan kon ik die velden prijs1,prijs2,prijs3 niet mee krijgen omdat in de tabel maar in veld prijs is met een status veld what. (what bepaald wat voor'n prijs het is)

SELECT d.debnr,d.maanden,d.nawgegevens...,
k.prijs as prijs1
FROM tabelX AS d LEFT OUTER JOIN kosten AS k ON d.did=k.did

Alvast bedankt voor de moeite,
GC-Martijn 8)7

// - bla la


  • whoami
  • Registratie: December 2000
  • Laatst online: 00:54
Wat je daar toont, is geen INNER join, maar een OUTER join.
Echter, als je 't goed doet, moet die outer join wel soulaas bieden; je zal dezelfde tabel 3x moeten joinen, en met aliassen moeten werken.

code:
1
2
3
4
5
select ... k1.prijs, k2.prijs, k3.prijs
FROM ..   d
LEFT JOIN kosten k1 ON did = d.id AND k1.what = 1
LEFT JOIN kosten k2 ON did = d.id AND k2.what = 2
LEFT JOIN kosten k3 ON did = d.id AND k3.what = 3

zo ongeveer.
Kijk echter ook even of je de goede indexen gedefinieerd hebt.

[ Voor 6% gewijzigd door whoami op 05-03-2007 11:31 ]

https://fgheysels.github.io/


  • GC-Martijn
  • Registratie: September 2004
  • Laatst online: 09-12-2018
@whoami

Snel en werkt ! bedankt.
Ik moet nu alleen even kijken of een outerjoin inderdaad alles van kolomX laat zien.
Als er bijv. geen kosten bestaan voor iets uit kolomX dan moet hij wel de nawgegeven laten zien.

Maar als ik zo snel kijk werkt dat nu ook.

Bedankt,
Martijn

// - bla la


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 12:53

Janoz

Moderator Devschuur®

!litemod

Volgens mij maak je het jezelf een stuk makkelijker wanneer je de drie prijzen niet als kolom wil, maar gewoon onder elkaar. In dat geval heb je te maken met een enkele join die je mbv wat indexen binnen enkele tientallen milliseconden wel uit de DB zou moeten kunnen trekken. Als je vervolgens op een uniek iets sorteerd (id bv) en daarnaa op k.what dan heb je alles keurig bij elkaar staan.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • GC-Martijn
  • Registratie: September 2004
  • Laatst online: 09-12-2018
@janoz,

Het is voor een tijdelijke overzichts lijst maar voor de snelheid maakt het nu niet meer uit.
het trekt de gegevens nu (volgens pgadmin) binnen 141 ms eruit !

// - bla la