来自多个表的mySQL SELECT提供了错误的信息

时间:2016-01-02 00:51:31

标签: mysql

每当我尝试选择某些东西时,我都会收到错误的结果。我想

SELECT voornaam, achternaam, transportmiddel
FROM Werknemer, Transportmiddel;

选择表格中的名字,姓氏和传输类型Werknemer& Transportmiddel。 但是..当我执行此选择时,myQSL以

响应
Meindert Stijfhals Fiets
Maarten Heylen Fiets
Meindert Stijfhals Auto
Maarten Heylen Auto

在我的插页中,我定义了这个:

INSERT INTO Winkel values
(0001 , 'xxx', 'xxx');
INSERT INTO Winkel values
(0002 , 'xxx', 'xxx');
INSERT INTO Werknemer values
(0100, 'Meindert', 'Stijfhals', 'xxx', 'xxx', 0001, 007);
INSERT INTO Werknemer values
(0101, 'Maarten', 'Heylen', 'xxx', 'xxx', 0002, 003);

INSERT INTO Transportmiddel values
(1, 'fiets', 20);
INSERT INTO Transportmiddel values
(2, 'auto', 0);
INSERT INTO Werknemer_Transport values
(0100, 1);
INSERT INTO Werknemer_Transport values
(0101, 2);

所以我很确定我只是说Meindert Stijfhals(0100)使用了fiets,而Maarten Heylen(0101)使用了auto。 这些表格在这里使用:

CREATE TABLE Werknemer (
    personeelsnummer int(4) not NULL,
    voornaam varchar(10) not NULL,
    achternaam varchar(10) not NULL,
    adres varchar(30) not NULL,
    telefoon varchar(10) not NULL,
    winkelnummer int(4) not NULL,
    dokternummer int(3) not NULL,
    foreign key(winkelnummer) references Winkel(winkelnummer),
    foreign key(dokternummer) references Dokter(dokternummer),
    primary key(personeelsnummer)
);

CREATE TABLE Transportmiddel (
        transportnummer int (1) not NULL,
        transportmiddel varchar(15) not NULL,
        bonus_in_euro int(5) not NULL,
        primary key(transportnummer)
    );

CREATE TABLE Werknemer_Transport (
    personeelsnummer int(4) not NULL,
    transportnummer int(1) not NULL,
    primary key(personeelsnummer, transportnummer),
    foreign key(personeelsnummer) references Werknemer(personeelsnummer),
    foreign key(transportnummer) references Transportmiddel(transportnummer)
);

这是我的代码:

CREATE TABLE Klant (
    klantnummer int(10) not NULL,
    voornaam varchar(10) not NULL,
    achternaam varchar(10) not NULL,
    adres varchar(30) not NULL,
    e_mail varchar(40) not NULL,
    primary key(klantnummer)
);

CREATE TABLE Winkel (
    winkelnummer int(4) not NULL,
    winkelnaam varchar(20) not NULL,
    winkeladres varchar(30) not NULL,
    primary key(winkelnummer)
);

CREATE TABLE Klant_Winkel (
    klantnummer int(10) not NULL,
    winkelnummer int(4) not NULL,
    primary key(klantnummer, winkelnummer),
    foreign key(klantnummer) references Klant(klantnummer),
    foreign key(winkelnummer) references Winkel(winkelnummer)
);

CREATE TABLE Leverancier (
    leveranciernummer varchar(3) not NULL,
    naam varchar(30) not NULL,
    adres varchar(30) not NULL,
    telefoon varchar(10) not NULL,
    winkelnummer int(4) not NULL,
    foreign key(winkelnummer) references Winkel(winkelnummer),
    primary key(leveranciernummer)
);

CREATE TABLE Artikel (
    artikelnummer int(5) not NULL,
    barcodenummer int(5) not NULL,
    artikelnaam varchar(20) not NULL,
    descriptie varchar(256),
    korting int(5),
    stock int(5) not NULL,
    type_voeding varchar(10) not NULL,
    primary key(artikelnummer)
);

CREATE TABLE Artikel_Winkel (
    winkelnummer int(4) not NULL,
    artikelnummer int(5) not NULL,
    primary key(winkelnummer, artikelnummer),
    foreign key(winkelnummer) references Winkel(winkelnummer),
    foreign key(artikelnummer) references Artikel(artikelnummer)
);

CREATE TABLE Dokter (
    dokternummer int(3) not NULL,
    naam varchar(20) not NULL,
    adres varchar(30) not NULL,
    telefoon varchar(15) not NULL,
    primary key(dokternummer)
);

CREATE TABLE Werknemer (
    personeelsnummer int(4) not NULL,
    voornaam varchar(10) not NULL,
    achternaam varchar(10) not NULL,
    adres varchar(30) not NULL,
    telefoon varchar(10) not NULL,
    winkelnummer int(4) not NULL,
    dokternummer int(3) not NULL,
    foreign key(winkelnummer) references Winkel(winkelnummer),
    foreign key(dokternummer) references Dokter(dokternummer),
    primary key(personeelsnummer)
);

CREATE TABLE Shift (
    shiftnummer int(4) not NULL,
    datum varchar(10) not NULL,
    start_tijd varchar(5) not NULL,
    eind_tijd varchar(5) not NULL,
    primary key(shiftnummer)
);

CREATE TABlE Werknemer_Shift (
    personeelsnummer int(4) not NULL,
    shiftnummer int(4) not NULL,
    primary key(personeelsnummer, shiftnummer),
    foreign key(personeelsnummer) references Werknemer(personeelsnummer),
    foreign key(shiftnummer) references Shift(shiftnummer)
);

CREATE TABLE Jobfunctie (
    jobnummer int(4) not NULL,
    jobfunctie varchar(15) not NULL,
    salaris_in_euro int(10) not NULL,
    primary key (jobnummer)
);

CREATE TABLE Werknemer_Jobfunctie (
    personeelsnummer int(4) not NULL,
    jobnummer int(4) not NULL,
    primary key(personeelsnummer, jobnummer),
    foreign key(personeelsnummer) references Werknemer(personeelsnummer),
    foreign key(jobnummer) references Jobfunctie(jobnummer)
);

CREATE TABLE Transportmiddel (
    transportnummer int (1) not NULL,
    transportmiddel varchar(15) not NULL,
    bonus_in_euro int(5) not NULL,
    primary key(transportnummer)
);

CREATE TABLE Werknemer_Transport (
    personeelsnummer int(4) not NULL,
    transportnummer int(1) not NULL,
    primary key(personeelsnummer, transportnummer),
    foreign key(personeelsnummer) references Werknemer(personeelsnummer),
    foreign key(transportnummer) references Transportmiddel(transportnummer)
);



   /* INSERTS */

/* INSERT dokter */
INSERT INTO Dokter values
(007, 'xxx', 'adres', 'xxx');
INSERT INTO Dokter values
(003, 'xxx', 'adres', 'xxx');

/* INSERT Winkel & Werknemer */
INSERT INTO Winkel values
(0001 , 'xxx', 'xxx');
INSERT INTO Winkel values
(0002 , 'xxx', 'xxx');
INSERT INTO Werknemer values
(0100, 'Meindert', 'Stijfhals', 'xxx', 'xxx', 0001, 007);
INSERT INTO Werknemer values
(0101, 'Maarten', 'Heylen', 'xxx', 'xxx', 0002, 003);

/* INSERT Werknemer & Transportmiddel */
INSERT INTO Transportmiddel values
(1, 'fiets', 20);
INSERT INTO Transportmiddel values
(2, 'auto', 0);
INSERT INTO Werknemer_Transport values
(0100, 1);
INSERT INTO Werknemer_Transport values
(0101, 2);

/* INSERT Werknemer & Jobfunctie */
INSERT INTO Jobfunctie values
(0001, 'gerant', 2000);
INSERT INTO Jobfunctie values
(0002, 'arbeider', 1500);
INSERT INTO Werknemer_Jobfunctie values
(0100, 0001);
INSERT INTO Werknemer_Jobfunctie values
(0101, 0002);

/* INSERT Klant */
INSERT INTO Klant values
(0000000001, 'xxx', 'xxx', 'xxx', 'xxx');

/* INSERT Leverancier van een winkel */
INSERT INTO Leverancier values
(009, 'xxx', 'adres', 'telefoon', 0001);

/* INSERT Werknemer & Shift */
INSERT INTO Shift values
(3000, '1/01/2016', '7:00', '17:00');
INSERT INTO Werknemer_Shift values
(0101, 3000);

/* INSERT Artikel & Winkel*/
INSERT INTO Artikel values
(87392, 76351, 'Chips', 'lekkere chips', NULL, 100, 'snoep');
INSERT INTO Artikel_Winkel values
(0001, 87392);
INSERT INTO Artikel_Winkel values
(0002, 87392);

SELECT voornaam, achternaam, transportmiddel
FROM Werknemer, Transportmiddel;

我有不同的SELECT命令也有这个问题。有人可以帮我吗?我认为这是因为我在两个表之间有一个表来连接它们。谢谢你的时间!

2 个答案:

答案 0 :(得分:2)

您必须告诉查询如何加入表格。

SELECT w.voornaam, w.achternaam, t.transportmiddel
FROM Werknemer w
JOIN Werknemer_Transport wt ON wt.personeelsnummer = w.personeelsnummer
JOIN Transportmiddel t ON t.transportnummer = wt.transportnummer;

答案 1 :(得分:2)

除了Terrence Curran's回答提供了适合您特定情况的查询之外,您似乎需要更多地了解如何使用SQL查询将表连接在一起。

由于您的数据已标准化,并且您了解表格的概念与公共字段相关。我建议您查看w3schools JOIN section of the SQL tutorial.这将为您提供不同类型联接的查询示例。从最初的页面链接开始,有6页有很好的简短示例和易于理解的解释。

第一页是您要查找的联接类型,与Terrence的回答相同。 JOININNER JOIN可以互换。