2013-04-16 172 views
3

我用下面的DB模式MYSQL關係查詢問題

enter image description here

一個客戶問我,讓他們對自己DB一些變化的工作,我還沒有和關係型數據庫在幾打多年來,一般與平面數據庫的工作

有人可以幫助我的方式與給我一個如何下面的查詢將工作的例子。

說,如果我想

選擇所有的電影與LIKE「%矩陣%」標題一定genreID下

任何援助將不勝感激

+0

如果你想要一個簡單的方法來「refamiliarize」自己如何手工編寫複雜的查詢,有一些優秀的教程網上課程,如[SQL課程(HTTP ://www.sqlcourse.com/index.html)或[SQL Zoo](http://sqlzoo.net/wiki/Main_Page) – mellamokb

回答

8

使用的inner join加盟三表

SELECT F.title 
FROM film F 
     INNER JOIN filmgenres FG 
       ON F.filmid = FG.film_filmid 
     INNER JOIN genres G 
       ON FG.genres_genreid = G.genreid 
WHERE F.title LIKE '%Matrix%' AND G.genre = "Some Genre" 
+0

感謝您的大力支持!我會在哪裏輸入GenreID號碼進行搜索? – user1372212

+0

如果你想指定一個特定的流派ID,你可以將它添加到join子句中 - 這就是你想要的嗎?如果是的話,我會編輯。 –

+0

如果可能的話,我想這樣做。 – user1372212

3

您需要先加入的表,

SELECT a.*, c.Genre 
FROM Film a 
     INNER JOIN FilmGenres b 
      ON a.FilmID = b.Film_FilmID 
     INNER JOIN Genres c 
      ON b.Genre_GenreID 
WHERE a.Title LIKE '%matrix%' 

爲了進一步獲得更多的知識有關加入,請訪問以下鏈接:

,但如果你要搜索一個特定的類型,那麼你可以添加一個條件爲好了,

SELECT a.*, c.Genre 
FROM Film a 
     INNER JOIN FilmGenres b 
      ON a.FilmID = b.Film_FilmID 
     INNER JOIN Genres c 
      ON b.Genre_GenreID 
WHERE a.Title LIKE '%matrix%' AND c.GenreID = 10 
3
SELECT Film.* 
FROM Film f 
JOIN FilmGenres fg ON g.Film_FilmID = f.FilmID 
WHERE fg.Genres_GenreID = 3 
AND Title LIKE '%Matrix%' 
1

這是一個非常簡單的加入:

select 
    Film.* 
from 
    Film 
inner join FilmGenres on 
    Film.FilmID = FilmGenres.Film_FilmID 
where 
    Film.Title like "%Matrix%" and 
    FilmGenres.Genres_GenreID = ? 
+2

我們通常不會在答案中使用舊式聯接。 – Barmar

+0

謝謝,我解決了這個問題,並會進一步考慮它。壞習慣很難消退。 – pilsetnieks

1
SELECT * FROM Film INNER JOIN FilmGenres ON Film.FilmID = FilmGenres.Film_FilmID 
    WHERE FilmGenres.Genres_GenreID = 1 
      AND 
      Film.Title like '%Matrix%'