Запрос SQL Select Выдает мне дубликаты столбцов

#sql

Вопрос:

Я пытаюсь написать запрос для отображения информации, но когда я использую ВНУТРЕННЕЕ СОЕДИНЕНИЕ, я получаю дубликаты полей идентификаторов. Мои таблицы и запрос приведены ниже. Я получаю дубликаты столбцов для wrestlerID. может быть, это мои ограничения ПК?

 CREATE TABLE WRESTLER 
(
    WrestlerID CHAR(6) NOT NULL,
    WrestlerFirst VARCHAR2(15) NOT NULL,
    WrestlerLast VARCHAR2(25) NOT NULL,
    WrestlerStyle CHAR(2) NOT NULL,
    WrestleKilos NUMERIC(3,0) NOT NULL,
    WrestleMeters NUMERIC(3,2),
    WrestleCity VARCHAR2(40) NOT NULL,
    WrestlerState CHAR(2) NOT NULL,
    WrestlerBirthdate Date,

    CONSTRAINT WRESTLER_PK PRIMARY KEY (WrestlerID)
);

CREATE TABLE CLUB 
(
    ClubID CHAR(5) NOT NULL,
    Club VARCHAR2(35) NOT NULL,
    WrestlerID CHAR(6) NOT NULL,
    CONSTRAINT CLUB_PK PRIMARY KEY (ClubID, WrestlerID),
    CONSTRAINT CLUB_FK 
        FOREIGN KEY (WrestlerID) REFERENCES WRESTLER(WrestlerID)
);

CREATE TABLE SCHOOL 
(
    SchoolID VARCHAR2(10) NOT NULL,
    School VARCHAR2(35) NOT NULL,
    WrestlerID CHAR(6) NOT NULL,
    CONSTRAINT SCHOOL_PK PRIMARY KEY (SchoolID, WrestlerID),
    CONSTRAINT SCHOOL_FK 
        FOREIGN KEY (WrestlerID) REFERENCES WRESTLER(WrestlerID)
);

CREATE TABLE MEDAL 
(
    WrestlerID CHAR(6) NOT NULL,
    WorldMedal NUMERIC(4,0),
    CONSTRAINT MEDAL_PK PRIMARY KEY (WrestlerID, WorldMedal),
    CONSTRAINT MEDAL_FK 
        FOREIGN KEY (WrestlerID) REFERENCES WRESTLER(WrestlerID)
);

SELECT
    t1.WrestlerID, t1.WrestlerFirst, t1.WrestlerLast,
    t2.WrestlerID, t2.School,
    t2.WrestlerID, t3.Club 
FROM
    WRESTLER t1 
INNER JOIN
    SCHOOL t2 ON t1.WrestlerID = t2.WrestlerID 
INNER JOIN
    CLUB t3 ON t1.WrestlerID = t3.WrestlerID;
 

Комментарии:

1. С внутренними соединениями вам действительно не нужно выбирать каждое WrestlerID из них . Просто SELECT t1.WrestlerID, ... и убери остальных.

2. Одна из ваших таблиц, вероятно, имеет несколько значений для одного и того же рестлера. Может ли 1 борец иметь более одной медали? Наверное, поэтому.

3. Спасибо, Джон, это все исправило.

Ответ №1:

Исправление моего запроса сработало

 SELECT
t1.WrestlerID, t1.WrestlerFirst, t1.WrestlerLast,
t2.School,
t3.Club FROM
WRESTLER t1 INNER JOIN
SCHOOL t2 on t1.WrestlerID = t2.WrestlerID INNER JOIN
CLUB t3 on t1.WrestlerID = t3.WrestlerID;