[PostgreSQL] Query werkt niet (column is ambiguous?)

Pagina: 1
Acties:

  • Gardocki
  • Registratie: Oktober 2000
  • Niet online
Hoi, ik heb een probleem met een query.

Ik heb de volgende tabellen:

code:
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
26
27
28
29
             Table "klant"

     Column     |    Type     |

----------------+-------------+
 klantnr        | serial      | 
 naam           | varchar(20) |

 

 Table "factuur"

    Column    |  Type   |                           
--------------+---------+
 factuurnr    | integer | 
 klantnr      | integer |
 factuurdatum | date    |
 orderdatum   | date    |


 Table "factuurregel"

    Column     |  Type   |                             
---------------+---------+
 regelnr       | integer | 
 factuurnr     | integer |
 artnr         | integer |
 aantal        | integer |
 prijs         | money   |

Daar wil ik een bepaalde tabel uitkrijgen, wat ook gebeurt met deze query:

SELECT klantnr, artnr, SUM(aantal) FROM factuurregel, factuur WHERE
factuur.factuurnr = factuurregel.factuurnr
GROUP BY artnr, klantnr HAVING sum(aantal) > 30;

Daaruit krijg ik deze tabel:

code:
1
2
3
4
5
6
 klantnr | artnr | sum
---------+-------+-----
      10 |     5 |  32
      10 |     4 |  41
      13 |     2 | 101
      13 |     1 |  50

Deze is al redelijk goed. Alleen wil ik in plaats van de klantnr, de naam van de klant laten zien. Dat probeer ik met deze query:

SELECT naam, artnr, SUM(aantal) FROM klant, factuurregel, factuur WHERE
klant.klantnr = factuur.klantnr AND
factuur.factuurnr = factuurregel.factuurnr
GROUP BY artnr, klantnr HAVING sum(aantal) > 30;

Jammer genoeg geeft deze alleen de volgende error:

SQL error:
ERROR: column reference "klantnr" is ambiguous

Kan iemand mij uitleggen wat ik verkeerd doe? Ik heb al een tijdje lopen stoeien met die query maar ik kom er niet uit.

Alvast bedankt :)

They made me do it.


  • dusty
  • Registratie: Mei 2000
  • Laatst online: 21-02 00:06

dusty

Celebrate Life!

De database weet niet uit welke tabel jij de klantnr wilt hebben, dus moet je aangeven uit welke tabel jij de klantnr terug wilt krijgen.

Even duidelijk:

Jij doet een join tussen twee tabellen, beide tabellen hebben klantnr in zich. Nu vraag jij aan het systeem geef klantnr terug.. maar jij zegt niet erbij uit welke tabel. En weet de database dus niet welke hij terug moet geven.

[ Voor 48% gewijzigd door dusty op 03-12-2004 19:43 ]

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR


  • Apache
  • Registratie: Juli 2000
  • Laatst online: 08-05 09:28

Apache

amateur software devver

klantnr komt voor in klant & factuur dus probeer GROUP BY artnr, klant.klantnr zodat pgsql weet welke klantnr uit welke tabel je wil hebben.

edit:
vloekt op dusty :X

[ Voor 13% gewijzigd door Apache op 03-12-2004 19:42 ]

If it ain't broken it doesn't have enough features


  • Gardocki
  • Registratie: Oktober 2000
  • Niet online
Ah, natuurlijk. Stom van mij.

Bedankt :)

They made me do it.


Verwijderd

code:
1
2
3
4
SELECT klant.naam, artnr, SUM(aantal) FROM klant, factuurregel, factuur WHERE
klant.klantnr = factuur.klantnr AND
factuur.factuurnr = factuurregel.factuurnr
GROUP BY artnr, klantnr HAVING sum(aantal) > 30;


Zou dus wel moeten werken :)

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

code:
1
2
3
4
SELECT naam, artnr, SUM(aantal) FROM klant, factuurregel, factuur WHERE
klant.klantnr = factuur.klantnr AND
factuur.factuurnr = factuurregel.factuurnr
GROUP BY artnr, klantnr HAVING sum(aantal) > 30;

Waarom groupeer je niet op naam ipv klantnr ?
Dus group by artnr, naam ?

PostgreSQL zal sowieso eisen dat er op naam gegroupeerd wordt, dat kan als de naam niet per klant uniek is evt ook zo:
group by artnr, klantnr, naam
Pagina: 1