MySQL возвращает много значений - PullRequest
0 голосов
/ 28 февраля 2019

У меня есть база данных MariaDB.

    #Create table room
create table if not exists room
(
  pk_roomNumber   INTEGER PRIMARY KEY NOT NULL,
  roomdescription VARCHAR(50),
  netmask         VARCHAR(15),
  subnetmask      VARCHAR(15)
);

#Create table client
CREATE TABLE IF NOT EXISTS client
(
  pk_macaddr       VARCHAR(17) PRIMARY KEY NOT NULL,
  ipadress         VARCHAR(15),
  hostname         VARCHAR(50),
  fk_pk_roomnumber INTEGER,
  last_seen        DATE,
  is_online        BOOLEAN
);


ALTER table client
  ADD CONSTRAINT pk_fk_roomnumber
    FOREIGN KEY fk_pk_roomnumber (fk_pk_roomnumber)
      REFERENCES room (pk_roomNumber);

И я пытаюсь найти каждого клиента, который находится в комнате 131.

В настоящее время я пытаюсь это сделать с помощью этого запроса

select hostname, pk_macaddr, ipadress, roomdescription, fk_pk_roomnumber from client,room
WHERE fk_pk_roomnumber AND fk_pk_roomnumber = '131';

У меня 160клиентов в моей базе данных, я разделил их на 4 комнаты по 40 клиентов в каждой, но когда я начинаю свой запрос, я получаю все 160 клиентов.Где мой запрос неверен?

С уважением, Лукас

Ответы [ 2 ]

0 голосов
/ 28 февраля 2019

Вы хотите «объединить» клиентские и комнатные столы:

select client.hostname, client.pk_macaddr, client.ipadress, room.roomdescription, client.fk_pk_roomnumber 
from client
inner join room
on client.fk_pk_roomnumber = room.pk_roomnumber
where room.pk_roomnumber = '131';
0 голосов
/ 28 февраля 2019

У вас неверное условие соединения .. (в вашем коде вы не объединяете две таблицы)

select c.hostname, c.pk_macaddr, c.ipadress, r.roomdescription, r.fk_pk_roomnumber 
from client c
INNER JOIN room r ON c.fk_pk_roomnumber =  r.pk_roomnumber
  and r.pk_roomnumber  = '131';

И вы должны использовать синтаксис explicti join (а ​​не ol и неясный синтаксис неявного объединения на основегде)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...