LEFT JOINed表的SQL限制

San*_*asu 5 mysql select group-by left-join

我有以下表格.

  1. 行业(身份证,姓名)
  2. 电影(id,name,industry_id)[行业有很多电影]
  3. 预告片(id,name,movie_id)[电影有很多预告片]

我需要为每个行业找到6个最新的预告片.每部电影都不需要预告片或可以有多个[0-n].

CREATE TABLE industry(id int, name char(10), PRIMARY KEY (id));

CREATE TABLE movie(id int, name char(10), industry_id int, PRIMARY KEY (id),
FOREIGN KEY (industry_id) REFERENCES industry(id));

CREATE TABLE trailer(id int, name char(10), movie_id int, PRIMARY KEY (id),
FOREIGN KEY (movie_id) REFERENCES movie(id));

INSERT INTO industry VALUES (1, "sandalwood");
INSERT INTO industry VALUES (2, "kollywood");

INSERT INTO movie VALUES (1, "lakshmi", 1);
INSERT INTO movie VALUES (2, "saarathi", 2);

INSERT INTO trailer VALUES (1, "lakshmi1", 1);
INSERT INTO trailer VALUES (2, "lakshmi2", 1);
INSERT INTO trailer VALUES (3, "lakshmi3", 1);
INSERT INTO trailer VALUES (4, "lakshmi4", 1);
INSERT INTO trailer VALUES (5, "lakshmi5", 1);
INSERT INTO trailer VALUES (6, "lakshmi6", 1);

INSERT INTO trailer VALUES (7, "saarathi4", 2);
INSERT INTO trailer VALUES (8, "saarathi5", 2);
INSERT INTO trailer VALUES (9, "saarathi6", 2);

SELECT  c.*
FROM    industry a
        LEFT JOIN movie b
            ON a.id = b.industry_id
        LEFT JOIN trailer c
            ON b.id = c.movie_id
LIMIT 0, 6

| ID |     NAME | MOVIE_ID |
----------------------------
|  1 | lakshmi1 |        1 |
|  2 | lakshmi2 |        1 |
|  3 | lakshmi3 |        1 |
|  4 | lakshmi4 |        1 |
|  5 | lakshmi5 |        1 |
|  6 | lakshmi6 |        1 |
Run Code Online (Sandbox Code Playgroud)

我需要从每部电影中只获取一部最近的预告片.但我正在为每部电影获得所有预告片.请建议我收到SQL声明.

Bra*_*ore 1

我不确定这在 MySql 中是否有效,因为我不记得 in 子句中是否可以有子查询,但您可以尝试:

select * from trailer
where id in (select max(id) from trailer group by movie_id)
Run Code Online (Sandbox Code Playgroud)

无论它是否有效,看起来您没有在查询中使用行业表,因此加入它没有多大意义(除非您实际上试图排除没有分配任何行业的电影。 .但根据你的样本我看起来这不是你的意图)。

如果上述查询在 MySql 中不起作用,请尝试这个

select  t.* 
from    trailer t join
        (select max(id) id from trailer group by movie_id) t2 on t1.id = t2.id
Run Code Online (Sandbox Code Playgroud)