我有两个表,只有在第二个表中满足所有特定条件时,才需要从第一个表中选择值。让我们在一个例子上做更多的解释。
第一张桌子
id movie
---|--------------
1 | Matrix
2 | Pulp Fiction
3 | Avengers
4 | Commando
第二张表
id movie_id user_id
---|-----------|---
1 | 1 | 1
2 | 1 | 2
3 | 1 | 3
4 | 2 | 1
5 | 2 | 4
6 | 3 | 2
7 | 4 | 1
8 | 4 | 3
从这些表中,我只需要查找用户1和3已看过的电影。所以结果我需要看
想要的结果
id movie
---|--------
1 | Matrix
4 | Commando
我尝试了一些查询,但无法掌握最终结果。 最后,我将根据选择作为输入的用户 “ construncting” 这个查询。因此,最终可能会有5个用户,而我只需要查找所有看过的电影。所以请记住这一点。
感谢所有帮助和想法,谢谢。
答案 0 :(得分:2)
您可以在下面尝试-
select b.id, b.movie from
Secondtable a inner join Firsttable b
on a.movie_id=b.id
where user_id in (1,3)
group by b.id, b.movie
having count(distinct user_id)=2
答案 1 :(得分:1)
一种方法使用group by
和having
:
select t1.id, t1.name
from t1 join
t2
on t1.id = t2.movie_id
where t2.user_id in (1, 3)
group by t1.id, t1.name
having count(*) = 2;
这种方法在可以实现的逻辑上非常灵活-基本上是通过更改having
子句来实现的。
我建议在不进行汇总的情况下使用exists
:
select t1.*
from t1
where exists (select 1
from t2
where t2.movie_id = t1.id and t2.user_id = 1
) and
exists (select 1
from t2
where t2.movie_id = t1.id and t2.user_id = 3
);
使用t2(movie_id, user_id)
上的索引,这可能是所有替代方法中性能最好的。
答案 2 :(得分:0)
这很容易完成,只需使用join子句即可。
select
distinct b.user_id,a.move
from
table1 a
join
table2 b on a.id = b.movie_id and b.user_id in (1,3)
答案 3 :(得分:0)
使用JOIN从2个表中获取相关数据(基于ID)并使用WHERE条件过滤结果
SELECT secondTable.id, firstTable.movie
FROM secondTable
JOIN firstTable ON secondTable.movie_id = firstTable.id
WHERE secondTable.user_id IN (1, 3)
答案 4 :(得分:0)
DISTINCT语句仅用于返回不同的值。
您可以尝试一下。我使用表名作为Firsttable和Secondtable
select DISTINCT f.id, f.movie from Firsttable f join Secondtable s on f.id = s.movie_id
where s.user_id in (1, 3)