2014-05-22 42 views
-5

有沒有人可以解釋爲什麼我的查詢不起作用?SQL內部連接vs LIKE不返回行

 
SELECT country.Country, city.City, location.Adress, museuminfo.Phone, museuminfo.Mail, museuminfo.Homepage, museum.MuseumName, museum.Description, museum.Collections, photo.PhotoRef 
FROM country 
INNER JOIN city 
ON country.CountryCode=city.CountryCode 
INNER JOIN location 
ON city.CityId = location.CityId 
INNER JOIN museuminfo 
ON location.LocationId = museuminfo.LocationId 
INNER JOIN museum 
ON museuminfo.MuseumInfoId = museum.MuseumInfoId 
INNER JOIN photo 
ON museuminfo.MuseumInfoId = photo.MuseumInfoId 
WHERE 
(MuseumName LIKE '%classic%') 
OR (Description LIKE '%classic%') 
OR (Collections LIKE '%classic%') 
AND museum.LanguageCode = 'EN' 

我有一個縮短版的正常工作,但你只能同時搜索一個表:

 
SELECT * FROM museum 
WHERE (MuseumName LIKE '%classic%') 
OR (Description LIKE '%classic%') 
OR (Collections LIKE '%classic%') 
AND museum.LanguageCode = 'EN' 

請幫我:-(

+1

查詢應該做什麼? –

+0

'INNER JOIN'在兩側產生匹配行的行。如果任何連接條件沒有匹配的行,那麼您將不會得到任何結果。嘗試使用'OUTER JOIN'或'LEFT JOIN'。 – univerio

+0

當你有一個縮短的版本,不工作,你可以解釋你正在嘗試做什麼,出了什麼問題。 – wvdz

回答

0

不是絕對的肯定,除非你提供一些示例數據,並讓知道什麼查詢實際嘗試實現...但嘗試更改您的WHERE條件如下

WHERE 
(museum.MuseumName LIKE '%classic%' 
OR museum.Description LIKE '%classic%' 
OR museum.Collections LIKE '%classic%') 
AND museum.LanguageCode = 'EN' 

(OR)

WHERE museum.LanguageCode = 'EN' 
AND 
(museum.MuseumName LIKE '%classic%' 
OR museum.Description LIKE '%classic%' 
OR museum.Collections LIKE '%classic%') 
+0

對不起,查詢是通過最初生成此查詢的搜索來獲取博物館的。正如我所說我有縮短的版本工作,因爲(我的猜測)它只抓住一張桌子,沒有所有的連接,我認爲它會把它弄糟。你寫的另一種代碼也行不通,可悲的是......我看到一些人提到使用外部連接。但我不認爲我完全理解他們,所以我認爲我要研究技能!但是,謝謝你的迴應! – Fluesopp