2014-10-29 137 views
-1

我對SQL很陌生,我正在處理一項任務,該任務要求我查找基於IMDB數據庫的名稱中包含「films」名稱的公司所創建的電影。 此數據庫的圖表可以在這裏查看: http://i.imgur.com/kj8qVgF.pngSQL - 查詢幫助

這是我正在處理的查詢。

SELECT t.title, t.id 
FROM title t, movie_link m 
JOIN movie_companies c ON (m.movie_id = c.movie_id) 
JOIN company_name n USING (id) 
WHERE n.name LIKE '%films%' 
+2

你得到的錯誤是什麼.. – ryekayo 2014-10-29 19:45:18

回答

0

你的代碼似乎確實有點接近你所需要的,但是那裏有一些奇怪的東西。首先,隱式連接title t, movie_link m在這些表之間執行笛卡爾乘積。此代碼應該工作:

SELECT DISTINCT t.id, t.title 
FROM title t 
INNER JOIN movie_companies mc 
    ON t.id = mc.movie_id 
INNER JOIN company_name cn 
    ON mc.company_id = cn.id 
WHERE cn.name LIKE '%films%' 

有幾件事情,你需要從該圖中考慮到,以獲得你想要的結果。例如,由於不同的公司可能是同一部電影的創作者(圖表允許),因此您需要使用DISTINCT否則您可能會得到重複的結果。

0

好像你缺少的titlemovie_link表之間的連接聯接謂詞。

我建議你不要在聲明中混用「逗號」和「JOIN關鍵字」語法。也就是說,刪除titlemovie_link之間的逗號,並將其替換爲關鍵字JOIN。如果您不想交叉連接,請添加連接謂詞。

此外,連接謂詞中的USING語法對我的口味有點含糊不清。我建議您明確指定要匹配哪些表的列,就像您爲加入movie_companies表所做的那樣。

以下查詢不可運行。該???需要用適當的標識符和別名來替換:

SELECT t.title 
    , t.id 
    FROM title   t 
    JOIN movie_link  m ON m.???  = t.??? 
    JOIN movie_companies c ON c.movie_id = m.movie_id 
    JOIN company_name n ON n.id  = ???.??? 
WHERE n.name LIKE '%films%' 
+0

似乎沒有任何需要加入到「movie_link」表 – Lamak 2014-10-29 19:55:20

+0

@Lamak:你可能是對的。在後面的連接謂詞中有一個來自該表的'movie_id'的引用。如果不需要該表,則可以從查詢中移除包含「movie_link」的整行,並且可以修改引用該列的連接謂詞。 (我可能會向後寫入查詢,從company_name表開始,作爲FROM子句中的第一個表,然後將連接添加到每個附加表中。) – spencer7593 2014-10-29 19:57:46