sql >> Database >  >> RDS >> Oracle

ORA-00918:kolom dubbelzinnig gedefinieerd in SELECT *

De projectie van een query kan slechts één instantie van een bepaalde naam hebben. Zoals je WHERE-component laat zien, heb je verschillende tabellen met een kolom met de naam ID. Omdat u * selecteert uw projectie heeft verschillende kolommen met de naam ID. Of het zou zijn geweest als de compiler ORA-00918 niet had geslingerd.

De oplossing is vrij eenvoudig:u zult de projectie moeten uitbreiden om benoemde kolommen expliciet te selecteren. Dan kun je ofwel de dubbele kolommen weglaten, met behoud van (bijvoorbeeld) COACHES.ID of kolomaliassen gebruiken:coaches.id as COACHES_ID .

Misschien vind je dat veel typen, maar het is de enige manier. Als het enig comfort is, SELECT * wordt in productiecode als een slechte praktijk beschouwd:kolommen met expliciete namen zijn veel veiliger.



  1. Waarom is het uitvoeren van opgeslagen procedures sneller dan een SQL-query vanuit een script?

  2. Hoe COERCIBILITY() werkt in MariaDB

  3. Grondbeginselen van tabeluitdrukkingen, deel 4 – Afgeleide tabellen, overwegingen voor optimalisatie, vervolg

  4. Hoe kan ik deze opmerkingen in een MySQL-dump verwijderen?