sql >> Database teknologi >  >> RDS >> PostgreSQL

Sådan slipper du en joinnøgle, når du forbinder to borde

Postgres ville ikke giver dig en fejl for duplikerede outputkolonnenavne, men nogle klienter gør det. (Dubletnavne er heller ikke særlig nyttige.)

Uanset hvad, så brug USING klausul som joinbetingelse for at folde de to joinkolonner til én:

SELECT *
FROM  tbl_a  a
LEFT  JOIN tbl_b b USING (id);

Mens du tilslutter dig den samme tabel (selv-join), vil der være flere duplikerede kolonnenavne. Forespørgslen ville næppe give mening til at begynde med. Dette begynder at give mening for forskellige tabeller. Som du sagde i dit spørgsmål til at begynde med:I have two tables ...

For at undgå alle duplikerede kolonnenavne, skal du angive dem i SELECT klausul eksplicit - muligvis uddeler kolonnealiasser for at få begge forekomster med forskellige navne.

Eller du kan bruge en NATURAL join - hvis det passer til din uforklarlige brug:

SELECT *
FROM  tbl_a  a
NATURAL LEFT JOIN tbl_b b;

Dette forbinder alle kolonner, der deler det samme navn og folder dem automatisk - nøjagtigt det samme som at angive alle almindelige kolonnenavne i en USING klausul. Du skal være opmærksom på regler for mulige NULL-værdier ...

Detaljer i manualen.




  1. MySQL, der overfører en AUTO_INCREMENT til en anden tabel

  2. 5 job, der kræver Microsoft Access

  3. Postgresql 11:Stored Procedure call error - For at kalde en procedure, brug CALL, Java

  4. oprettelse af login-side med PHP