简体   繁体   中英

Join one field of one table to many fields of other table

I want to join a primary key of one table to many foreign keys of other table. I want to join codigo_arbitro from table equipo_arbitral to anotador, crono and op24 from table partido. If I join the anotador field only it's no problem but when I try to join another field Mysql throws the error not unique table alias p. It's the code I tryed.

SELECT Codigo_arbitro, Hora, PABELLON.Codigo_localidad AS 'Loca' FROM EQUIPO_ARBITRAL
        INNER JOIN PARTIDO P ON EQUIPO_ARBITRAL.Codigo_arbitro=P.Anotador
        INNER JOIN PARTIDO P ON EQUIPO_ARBITRAL.Codigo_arbitro=P.Crono
        INNER JOIN PARTIDO P ON EQUIPO_ARBITRAL.Codigo_arbitro=P.Op24

It's the structure of the tables.

CREATE TABLE EQUIPO_ARBITRAL(Codigo_arbitro INT NOT NULL AUTO_INCREMENT, 
Licencia     VARCHAR(4), Nombre VARCHAR(20), Apellidos VARCHAR(20), 
Email VARCHAR(20), Telefono1 INT(9), Telefono2 INT(9), Cuenta INT(20), 
Cod_localidad INT(3), PRIMARY KEY (Codigo_arbitro));

CREATE TABLE PARTIDO(Codigo_Partido INT NOT NULL AUTO_INCREMENT PRIMARY KEY, EquipoA INT NOT NULL, EquipoB INT NOT NULL, Fecha DATE,
Hora TIME, Codigo_pabellon INT NOT NULL, Codigo_categoria INT NOT NULL, Tipo VARCHAR(10), Jornada INT NOT NULL, ArbPrin INT,  ArbAux INT, Anotador INT, Crono INT, Op24 INT,
FOREIGN KEY (EquipoA) REFERENCES EQUIPO (Codigo_equipo), FOREIGN KEY (EquipoB) REFERENCES EQUIPO (Codigo_equipo), FOREIGN KEY (Codigo_categoria) REFERENCES CATEGORIA (Codigo_Categoria),
FOREIGN KEY (ArbPrin) REFERENCES EQUIPO_ARBITRAL (Codigo_arbitro), FOREIGN KEY (ArbAux) REFERENCES EQUIPO_ARBITRAL(Codigo_arbitro),
FOREIGN KEY (Anotador) REFERENCES EQUIPO_ARBITRAL (Codigo_arbitro), FOREIGN KEY (Crono) REFERENCES EQUIPO_ARBITRAL (Codigo_arbitro), FOREIGN KEY (Op24) REFERENCES EQUIPO_ARBITRAL (Codigo_arbitro),
FOREIGN KEY (Codigo_pabellon) REFERENCES PABELLON (Codigo_pabellon));

There are the data of the table partidos.

 Hora,     ArbPrin, ArbAux, Anotador, Crono, Op24
'17:30:00',  '5',    '81',    '86',   '78', '87',

Result will be like this:

Codigo_arbitro   Hora
       5         17:30
      81         17:30
      86         17:30
      78         17:30
      87         17:30

Every joined table should have a separate alias, even if it's the same table. Also, from the description of your problem, you need a UNION of 3 separate JOIN queries.

SELECT Codigo_arbitro, Hora, PABELLON.Codigo_localidad AS 'Loca' FROM EQUIPO_ARBITRAL
        INNER JOIN PARTIDO P1 ON EQUIPO_ARBITRAL.Codigo_arbitro=P1.Anotador
        UNION
SELECT Codigo_arbitro, Hora, PABELLON.Codigo_localidad AS 'Loca' FROM EQUIPO_ARBITRAL
        INNER JOIN PARTIDO P2 ON EQUIPO_ARBITRAL.Codigo_arbitro=P2.Crono
        UNION
SELECT Codigo_arbitro, Hora, PABELLON.Codigo_localidad AS 'Loca' FROM EQUIPO_ARBITRAL
        INNER JOIN PARTIDO P3 ON EQUIPO_ARBITRAL.Codigo_arbitro=P3.Op24;

you should menion alias table like as :

P1, P2, P3

you should change and mention the alias name:

  SELECT 
  Codigo_arbitro,                         --- alias table name 
  Hora,                                   --- alias table name
  PABELLON.Codigo_localidad AS 'Loca' 
  FROM EQUIPO_ARBITRAL
  INNER JOIN PARTIDO P1 
  ON EQUIPO_ARBITRAL.Codigo_arbitro=P1.Anotador
  INNER JOIN PARTIDO P2 
  ON EQUIPO_ARBITRAL.Codigo_arbitro=P2.Crono
  INNER JOIN PARTIDO P3 
  ON EQUIPO_ARBITRAL.Codigo_arbitro=P3.Op24

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM