我有2张桌子。一个是电影表,其中存储所有电影数据而另一个是关系表,在那里我可以看到哪个电影附加到哪个类别。如果我想要显示第6类的电影,我就这样加入:
SELECT t1.title, t2.category FROM movies t1
JOIN movie_categories t2 ON t1.movieid = t2.movieid
WHERE t2.category = 6
它运作得很好。然而,电影SEF网址是基于table2的第一行生成的(实际上它应该连接到table3,一个类别表,我会找到sef别名,但是现在我不需要它,我只是想知道如何获取第一类)。所以说,电影有3个类别,看起来像这样:
Table 2 [relations table]
id movieid category
1 1 3
2 1 6
3 1 2
Table 1 [movie table]
movieid
1
2
我之前显示的查询返回如下结果:
title category
bla1 6
bla2 6
但是要创建sef url,我需要从关系表中获取第一个类别id,在这种情况下为3。
我想知道如何构建查询以实现我所描述的结果。
答案 0 :(得分:1)
假设:MIN表示movie_Categories中的最低ID,然后显示它的类别值。
drop table movie;
drop table movie_categories;
create table movie (movieid int, Title varchar(10));
create table movie_categories (Id int, movieID int, category int);
insert into movie values (1, 'The');
insert into movie values (2, 'End');
insert into movie_categories values (1,1,3);
insert into movie_categories values (2,1,6);
insert into movie_categories values (3,1,2);
--To aid in understanding you may want to select * and see why this works and remove the where clause.
--Basically the two joins to Movie_Categories is once for the LOWEST ID and once again to get the limiting category.
SELECT M.Title, MC1.Category
FROM Movie M
INNER JOIN (SELECT min(ID) ID, MovieID
from movie_categories mc
GROUP BY MovieID) L
on L.MovieID = M.MovieID
INNER JOIN Movie_Categories MC1
on L.MovieID = MC1.MovieID
INNER JOIN Movie_Categories MC2
on l.movieid = mc2.movieid
and L.ID = MC1.ID
where mc2.category = 6
结果:
title category
The 3
注意:未列出第二个标题,因为movie_category中没有与6类别匹配的记录。