我想将一个表的主键加入到其他表的许多外键中。 我想从table equipo_arbitral加入codigo_arbitro到表partido的anotador,crono和op24。 如果我加入anotador字段只是没有问题但是当我尝试加入另一个字段时,Mysql会抛出错误而不是唯一的表别名p。 这是我试过的代码。
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
这是表格的结构。
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));
有表partidos的数据。
Hora, ArbPrin, ArbAux, Anotador, Crono, Op24
'17:30:00', '5', '81', '86', '78', '87',
结果将如下:
Codigo_arbitro Hora
5 17:30
81 17:30
86 17:30
78 17:30
87 17:30
答案 0 :(得分:1)
每个连接的表都应该有一个单独的别名,即使它是同一个表。 此外,根据您的问题的描述,您需要一个3个单独的JOIN查询的UNION。
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;
答案 1 :(得分:-1)
你应该将alias
表作为:
P1,P2,P3
您应该更改并提及别名:
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