2017-04-18 22 views
1

Typeフィールドが "HOR"(horror)に等しいが、いくつかのレコードが複数のタイプ(HOR、COM、ADV)を持つムービーデータベースからレコードを取得しようとしています。 )と私のクエリは、レコードが正確に "HOR"に等しい結果を返すだけです。 「HOR」タイプのレコードをすべて取得するにはどうすればよいですか?Sqlクエリで正しい結果が取得されない

マイクエリ:

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

注:

  • 、データベース内のTypeフィールドは、Visual Studio

  • 2015を使用して

  • 私はC#でコーディングしています短いテキストです

+0

でフィルムを関連付けるための第二のテーブルを作成することをお勧めしますあなたはデータと結果について詳しく説明できますか?このクエリは、WHERE Type = HORというレコードを返します。しかし、このクエリーも意味をなさない。あなたが既に持っている正確なデータを照会しているからだ。タイプ。あなたが私たちに見せている範囲外のものが間違っているようです。 – David

+0

複数の種類のレコードはどのように保存されますか?同じ3つのセル(HOR、COM、ADV)を同じ「セル」に同時に格納することはできますか? –

+1

以下の回答は機能しますが、依然としてデータベースの設計に大きな問題があると言えます。複数のコードを含む文字列を使用する代わりに、複数のフィルムタイプを表すテーブルを作成する必要があります。このようなテーブル(FilmCategory)には、フィルムテーブルの主キーとカテゴリを表す第2フィールドが必要です。カテゴリがHOR、COMおよびADVのファイルに対して3つのレコードを格納します。これで、カテゴリHORとADVの映画を検索できます。提案されたソリューションでこれを実行してください。 – Steve

答えて

1

あなたのタイプが"HOR,COM,ADV"のような同じ列にあるとすれば、=LIKEに変更し、検索文字列(この場合はHOR)のまわりにワイルドカード%を使用してください。

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

これはどこかの列の値とその値が正確にHORであるだけでなく、これらの列内の文字列HORを検索します。

+0

明確な定義をありがとう!完璧に動作します。 –

+0

うれしい私は助けることができました!これがうまくいく場合は、答えの左側にある緑色のチェックマークをクリックしてください。 =) –

0

「LIKE」試合が動作します(と他の人が合法的にそれをうまく説明)しながら

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

を試してみてください、私はあなたのデータの再構築を検討することをお勧めします。テキストフィールドを使用する方法は、実際にSQLをどのように使用するように設計されているかではありません。

1つの問題は、実際に入力検証を行うことができないことです。一般に、入力しているデータの健全性をDBで確認することができます(それはベストプラクティスです)。そうすれば誰も誤ってHOR(HORではなく)のようなものに入ることができます。

第2に、後で部分文字列として探している組み合わせのいずれかを含む可能性のあるその項目のオプションを持つことはできません。

第3に、DBサイズと負荷に応じて、下に置くことになりますが、これはあまり効果的な解決策ではありません。

私が忘れてる理由があると確信しているが、少なくともこれらの理由のために、私は、主キーがあるジャンル、(フィルムID、genreid)

関連する問題