2017-04-18 74 views
1

我想從電影數據庫中檢索類型字段等於「HOR」(對於恐怖)但某些記錄有多個類型(HOR,COM,ADV )和我的查詢只返回記錄等於「HOR」的結果。我如何檢索具有「HOR」類型的所有記錄?sql查詢不檢索正確的結果

我的查詢:

selectCommand = "SELECT Type from DVDs WHERE Type = HOR"; 

注:

  • 在數據庫中的類型字段是使用Visual Studio 2015年

  • 一個簡短的文字

  • 我在C#編碼

+0

關聯創建第二個表你能詳細說明數據和結果嗎?這個查詢肯定會*只*返回記錄'WHERE Type = HOR'。但是這個查詢也沒有意義,因爲你正在查詢你已經有的確切數據......類型。看起來可能你所展示給我們的範圍之外的東西是錯誤的。 – David

+0

如何存儲多種類型的記錄?所有三個(HOR,COM,ADV)可以同時存儲在同一個「單元格」中嗎? –

+1

讓我說,雖然下面的工作答案,你仍然有一個在數據庫設計中的大問題。您應該創建一個代表多個膠片類型的表格,而不是使用具有多個代碼的字符串。在這樣的表格(FilmCategory)中,您應該有電影表的主鍵和代表類別的第二個字段。然後,您爲類別爲HOR,COM和ADV的文件存儲三條記錄。現在您可以查詢類別HOR和ADV的電影。試着用建議的解決方案來做到這一點。 – Steve

回答

1

假設您的類型全部位於"HOR,COM,ADV"之類的同一列中,請將您的=更改爲LIKE,並在搜索字符串(HOR在此情況下)周圍使用通配符%

selectCommand = "SELECT Type from DVDs WHERE Type LIKE '%HOR%'"; 

這將列值中搜索字符串HOR的任何地方,而不僅僅是那些價值是完全HOR列。

+0

感謝您的明確定義!完美的作品。 –

+0

很高興能幫到你!如果這適用於您,請點擊答案左側的綠色複選標記。 =) –

0

嘗試

"SELECT Type from DVDs WHERE Type LIKE '%HOR%' "; 
1

雖然「喜歡」的比賽就可以了(和其他人理所當然地解釋得很好),我建議考慮重組你的數據。使用文本字段的方式實際上不是SQL設計用於的方式。

一個問題是你真的無法對它進行輸入驗證。一般來說,您可以擁有(並且最好擁有)數據庫完整性 - 檢查您輸入的數據。這樣,沒有人可以誤入HAR(而不是HOR)之類的東西。

其次,您不能以後有任何選項可能包含您正在尋找作爲子字符串的組合之一的該字段。

第三,根據數據庫大小和負載,你會把它放在下面,這不是一個非常高效的解決方案。

我敢肯定有原因,我忘了,但至少這些原因,我會推薦爲電影與流派,其中主鍵是(filmid,genreid)