foutmelding: field list is ambiguous

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Johan Vels

Johan Vels

25/09/2014 11:48:18
Quote Anchor link
Hallo Allemaal,

Heb de volgende code:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
SELECT id, veld2, veld3
FROM db1.tabel1, db2.tabel2, db3.tabel3
WHERE NOT EXISTS (SELECT *
                  FROM db1.tabel1
                  WHERE tabel1.id = tabel2.id)


Nu krijg ik de volgende melding:

Column 'id' in field list is ambiguous

Hoe los ik dit op?
 
PHP hulp

PHP hulp

21/12/2024 06:21:29
 
Jan de Laet

Jan de Laet

25/09/2014 11:58:15
Quote Anchor link
Door bij de velden achter de select ook aan te geven uit welke tabel ze komen. Bijvoorbeeld tabel1.id.
 
Eddy E

Eddy E

25/09/2014 12:03:05
Quote Anchor link
Ambiguous betekent: niet geheel duidelijk.

Je hebt waarschijnlijk in meer dan 1 tabel de kolom 'id' staan.
Welk kolom moet hij dan pakken? Die van tabel 1? Tabel 2? Of tabel 3?

Om fouten te voorkomen geeft hij (en terecht) een foutmelding.
Dit kan je inderdaad, zoals Jan de Laet voorkomen door duidelijk te vermelden uit welke tabel die komt.
En wil je dat korter maken, dan kan je gebruik maken van aliassen:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
SELECT u.user_id, p.post_id, p.message
FROM phpbbb_users AS u
LEFT JOIN phpbb_posts AS p
ON (u.user_id = p.user_id)


Zou je geen aliassen gebruiken, dan ziet exact dezelfde query er zo uit:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
SELECT phpbbb_users.user_id, phpbb_posts.post_id, phpbb_posts.message
FROM phpbbb_users
LEFT JOIN phpbb_posts
ON (phpbb_users.user_id = phpbb_posts.user_id)


Stuk lastiger te lezen. En aliassen toepassen is veel minder typewerk.
Je kan zelfs het AS geheel weglaten.
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

25/09/2014 14:22:46
Quote Anchor link
Johan Vels op 25/09/2014 11:48:18:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
SELECT id, veld2, veld3
FROM db1.tabel1, db2.tabel2, db3.tabel3
WHERE NOT EXISTS (SELECT *
                  FROM db1.tabel1
                  WHERE tabel1.id = tabel2.id)

Ik adviseer je om deze query om te schrijven naar een ANSI JOIN, dan zal je waarschijnlijk heel snel zien dat je het niet goed aanpakt.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.