繁体   English   中英

JOIN三个表并在SQL中获取特定结果

[英]JOIN three table and get specific result in SQL

我有三个表如下:

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个值。 我在哪里做错了? 提前致谢。

    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
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    

我假设您在连接表中想要的id是p.id,如果你想要protocol_item.id那么它应该是pi.id作为id

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM