Данные умножаются на запрос MySQL - PullRequest
0 голосов
/ 02 марта 2019

У меня есть эта таблица:

CREATE TABLE Employee(
    id_employee INT PRIMARY KEY,
    Name VARCHAR(20),
    Last_name VARCHAR(20),
    Gender VARCHAR(1),
    Area INT     

 );

Создана новая таблица:

CREATE TABLE Area(
    id_area INT PRIMARY KEY,
    Area_name VARCHAR(20)
);

Я хочу, чтобы столбец Area в Employee преобразовал внешний ключ столбца id_area изПлощадь таблицы, поэтому я изменяю таблицу.

ALTER TABLE Employee
ADD FOREIGN KEY(Area)
REFERENCES Area(id_area)
ON DELETE SET NULL;

Когда я использую DESC для таблицы сотрудников, кажется, что все в порядке, столбец Площадь теперь имеет значение MUL.

Теперь я ввожу данные в таблицуОбласть:

INSERT INTO Area VALUES(1, 'Grphic Design');
INSERT INTO Area VALUES(2, '3D Design');
INSERT INTO Area VALUES (3,'Software');
INSERT INTO Area VALUES(4, 'Administration');

Теперь я ввожу свое первое значение в Employee:

INSERT INTO Empleados VALUES (109,'Charles', 
'Cook','M',1);

И, наконец, я использую этот запрос, чтобы увидеть, как движется таблица, если столбцы связаны:

SELECT Name, Employee.Area, Area.id_area
FROM Employee, Area;

И я получил такой результат:

Name    | Area | id_area
Charles |   1  |    1
Charles |   1  |    2
Charles |   1  |    3
Charles |   1  |    4

Хорошо, что я сделал не так и почему мой код является мусором?с учетом этого запроса, не должны ли все результаты быть Charles 1, id_area 1?и только один результат?я получаю четыре каждый раз, если я добавляю другого человека, результаты этого запроса умножаются, добавляя еще 1234 быка.

1 Ответ

0 голосов
/ 02 марта 2019

Ваша проблема в неявном JOIN в вашем запросе:

SELECT Name, Employee.Area, Area.id_area
FROM Employee, Area;

Символ , эквивалентен INNER JOIN, и, поскольку у вас нет условия для JOIN itстановится CROSS JOIN, соединяя каждую строку Employee с каждой строкой Area.Несмотря на то, что Employee.Area является внешним ключом для Area.id_area, он не заставляет таблицы объединяться по этому ключу, вам необходимо явно указать его как условие JOIN:

SELECT Name, Employee.Area, Area.id_area
FROM Employee
JOIN Area ON Employee.Area = Area.id_area
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...