基于多个表的连接显示一个条件为真
Display that a condition is true based on the joining of multiple tables
背景:
我想展示所有与演员本·阿弗莱克合作过的人。
这是我的数据:
People table
id name
1 Ben Affleck
2 Leonardio DiCaprio
3 Matt Damon
Movies table
id title
1 Good Will Hunting
2 example
3 example
Credits table
id movie_id person_id
1 1 1
2 2 4
3 3 6
期望输出
name movie
Matt Damon Good Will Hunting
这是我试过的:
我知道我必须将人物、电影和演职员表 table 加入到一起,因为我正试图找到与本·阿弗莱克合作过的所有演员:
SELECT p.name, m.title, c.movie_id
FROM Credits c
JOIN People p ON p.id = c.person_id
JOIN Movies m ON m.id = p.id
WHERE p.name = 'Ben Affleck';
我还在研究这个。
你可以使用 exists
:
select p.name, m.title, c.movie_id
from people p
inner join credits c on c.person_id = p.id
inner join movies m on m.id = c.movie_id
where exists (
select 1
from people p1
inner join credits c1 on c1.person_id = p1.id
where c1.movie_id = c.movie_id and p1.name = 'Ben Affleck'
)
或者您可以使用 IN
,有时它比 EXISTS
更容易理解。您在初始查询中加入 Movies
table 时也有错误,您必须比较来自 Movies
的电影 ID,即 id
和来自 Credits
的电影 ID这是 movie_id
SELECT p.name, m.title
FROM Credits c
JOIN People p ON p.id = c.person_id
JOIN Movies m ON m.id = c.movie_id
WHERE m.id IN (
SELECT movie_id
FROM Credits c1
JOIN People p1 on p1.id = c1.person_id
WHERE p1.name = 'Ben Affleck'
)
您可以使用 IN 子句,但也不需要本·阿弗莱克出现
SELECT
p.name, m.title, c.movie_id
FROM
Credits c
JOIN
People p ON p.id = c.person_id
JOIN
Movies m ON m.id = p.id
WHERE
m.id IN (SELECT
movie_id
FROM
credis
WHERE
person_id IN (SELECT
id
FROM
People
WHERE
name = 'Ben Affleck'))
AND p.name <> 'Ben Affleck'
背景:
我想展示所有与演员本·阿弗莱克合作过的人。
这是我的数据:
People table
id name
1 Ben Affleck
2 Leonardio DiCaprio
3 Matt Damon
Movies table
id title
1 Good Will Hunting
2 example
3 example
Credits table
id movie_id person_id
1 1 1
2 2 4
3 3 6
期望输出
name movie
Matt Damon Good Will Hunting
这是我试过的:
我知道我必须将人物、电影和演职员表 table 加入到一起,因为我正试图找到与本·阿弗莱克合作过的所有演员:
SELECT p.name, m.title, c.movie_id
FROM Credits c
JOIN People p ON p.id = c.person_id
JOIN Movies m ON m.id = p.id
WHERE p.name = 'Ben Affleck';
我还在研究这个。
你可以使用 exists
:
select p.name, m.title, c.movie_id
from people p
inner join credits c on c.person_id = p.id
inner join movies m on m.id = c.movie_id
where exists (
select 1
from people p1
inner join credits c1 on c1.person_id = p1.id
where c1.movie_id = c.movie_id and p1.name = 'Ben Affleck'
)
或者您可以使用 IN
,有时它比 EXISTS
更容易理解。您在初始查询中加入 Movies
table 时也有错误,您必须比较来自 Movies
的电影 ID,即 id
和来自 Credits
的电影 ID这是 movie_id
SELECT p.name, m.title
FROM Credits c
JOIN People p ON p.id = c.person_id
JOIN Movies m ON m.id = c.movie_id
WHERE m.id IN (
SELECT movie_id
FROM Credits c1
JOIN People p1 on p1.id = c1.person_id
WHERE p1.name = 'Ben Affleck'
)
您可以使用 IN 子句,但也不需要本·阿弗莱克出现
SELECT
p.name, m.title, c.movie_id
FROM
Credits c
JOIN
People p ON p.id = c.person_id
JOIN
Movies m ON m.id = p.id
WHERE
m.id IN (SELECT
movie_id
FROM
credis
WHERE
person_id IN (SELECT
id
FROM
People
WHERE
name = 'Ben Affleck'))
AND p.name <> 'Ben Affleck'