Присоединяйтесь к трем таблицам и получите конкретный результат в SQL - PullRequest
0 голосов
/ 12 июня 2019

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

protocol:

+----+---------+------+----------+
| id | subject | date | location |
+----+---------+------+----------+
| 1  | sub1    | c1   | s1       |
| 2  | sub2    | c1   | s2       |
| 3  | sub3    | c3   | s2       |
| 4  | sub4    | c2   | s3       |
+----+---------+------+----------+

protocol_item:

+----+----------+-------+
| id | protocol | body  |
+----+----------+-------+
| 1  | 1        | Hello |
| 2  | 2        | world |
| 3  | 2        | ok    |
+----+----------+-------+

protocol_participant:

+----------+-------------+
| protocol | participant |
+----------+-------------+
|  1       | Right 1     |
|  2       | part 72     |
|  2       | Hello 3     |
+----------+-------------+

Я хочу выбрать элемент из таблицы protocol_item, где protocol_item.protocol = 2:

+----+---------+----------+-------+-------------+
| id | subject | location | body  | participant |
+----+---------+----------+-------+-------------+
| 2  | sub2    | s2       | world | part 72     |
| 2  | sub2    | s2       | ok    | Hello 3     "
+----+---------+----------+-------+-------------+

Я попробовал ниже способ:

select item.id 
  , item.protocol
  , item.body
  , p.subject
  , pp.participant 
from protocol_item item 
left join protocol p 
  on item.protocol = p.id 
left join protocol_participant pp 
  on pp.protocol = item.protocol 
where item.protocol = 2;

Но он показывает 4 значения.Где я делаю не так?Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 12 июня 2019
SELECT p.id as id
     , p.subject
     , p.location
     , pi.body
     , pp.participant 
  FROM protocol p 
  JOIN protocol_item pi
    ON p.id = pi.protocol 
  JOIN protocol_participant pp 
    ON pi.protocol = pp.protocol 
 WHERE pi.protocol = 2    

Я предполагаю, что идентификатор, который вы хотите видеть в объединенной таблице, это p.id, если вы хотите protocol_item.id, тогда это должен быть pi.id как id

0 голосов
/ 12 июня 2019
    SELECT item.id, item.protocol, item.body, p.sub, pp.participant 
FROM protocol p 
    INNER JOIN protocol_item item ON item.protocol = p.id 
    INNER JOIN protocol_participant pp ON pp.protocol = item.protocol 
WHERE item.protocol = 2 GROUP BY item.id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...