[英]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.