2015-10-07 56 views
1

我有一個很大的電影數據庫,我想按年份和類型搜索電影。MySQL左連接1結果爲非常大的數據庫

我有3個表來處理:

1. movies (Key TITLE_ID) 
2. movie2genre (TITLE_ID + GENRE_ID) 
3. genre (Key GENRE_ID) 

電影:

+----------+---------------+------+ 
| TITLE_ID |  TITLE  | YEAR | 
+----------+---------------+------+ 
| 10001 | Matrix  | 1999 | 
| 10002 | Walk on Water | 2004 | 
+----------+---------------+------+ 

movie2genre:

+----------+----------+ 
| TITLE_ID | GENRE_ID | 
+----------+----------+ 
| 10001 | 1  | 
| 10001 | 2  | 
| 10002 | 2  | 
| 10002 | 4  | 
| 10001 | 3  | 
+----------+----------+ 

流派:

+----------+-----------+ 
| GENRE_ID | GENRE_TXT | 
+----------+-----------+ 
| 1  | Action | 
| 2  | Adventure | 
| 3  | Thriller | 
| 4  | Fantasy | 
+----------+-----------+ 

用戶發送1999年的類型冒險或驚悚的請求。

如何在1個優化查詢中查找所有電影?

結果應該是:

+----------+--------+------+-----------+ 
| TITLE_ID | TITLE | YEAR | GENRE_TXT | 
+----------+--------+------+-----------+ 
| 10001 | Matrix | 1999 | Action | 
+----------+--------+------+-----------+ 

我不在乎哪個流派被選中,只是這部電影爲體裁的1用戶要求。

回答

1

您可以嘗試將3個表格連接在一起,然後使用您對年份和電影流派的要求限制WHERE子句的查詢。下面的查詢將只返回一條記錄,您指定的記錄是可以接受的。

SELECT m.TITLE_ID, m.TITLE, m.YEAR, g.GENRE_TXT 
FROM movies m 
INNER JOIN movie2genre mg ON m.TITLE_ID = mg.TITLE_ID 
INNER JOIN genre g ON mg.GENRE_ID = g.GENRE_ID 
WHERE m.YEAR = 1999 AND g.GENRE_TXT IN ('Adventure', 'Thriller') 
+0

我會刪除LIMIT ... OP需要所有電影...只是他的示例數據只會從顯示內容返回1。 (但upvoted準確查詢,否則) – DRapp

+0

@DjRapp感謝您指出了這一點,爲upvote。 –

+0

謝謝!工作很好。我只是添加「GROUP BY m.TITLE_ID」以獲得1個結果的電影。 – TheWiz