2017-10-01 12 views
0

私はSQLを使用したデータベースがあった場合ちょっと質問は、:SQLのレコード間で共通の値を見つける方法は?

Names: Max¦ John¦ May¦ Olivia 

Numbers: 3, 7, 9¦ 1, 3, 4¦ 8, 5, 3¦ 5, 7, 1 

を数5のようにどのように多くの人々を参照して、彼らを表示するには、「番号」欄をチェックするためにSQLを使用した方法はあります番号のような名前をユーザに提示する。ここで

+2

*数字のリストをカンマ区切りの文字列として保存しないでください。そのようにデータを格納するのは間違いです。データベースを修正してください。 –

+1

はい、あります。より詳細な回答を得るには、あなたの質問を編集し、名前と番号の関係とどの人がどの番号を好むかを指定する必要があります。 – jhenderson2099

答えて

1

まあ、しかし、あなたはまだそれに移動したい場合は、ここでそれを行う方法です:その代わり、次のようなテーブルが欲しい

SELECT * 
FROM YourTableName 
WHERE Numbers LIKE '%5%'; 

の検索結果を:

DECLARE @Names TABLE (ID INT IDENTITY(1,1), Name VARCHAR(30)); 
DECLARE @Numbers TABLE (Name INT, Number INT); 

INSERT INTO @Names VALUES 
('Max'), 
('John'), 
('May'), 
('Olivia'); 
INSERT INTO @Numbers VALUES 
(1, 3), 
(1, 7), 
(1, 9), 
(2, 1), 
(2, 3), 
(2, 4), 
(3, 8), 
(3, 5), 
(3, 3), 
(4, 5), 
(4, 7), 
(4, 1); 
/**/ 
SELECT N.Name, NM.Number 
FROM @Names N INNER JOIN @Numbers NM ON N.ID = NM.Name 
WHERE NM.Number = 5; 
01:

+--------+---------+ 
| Name | Numbers | 
+--------+---------+ 
| May | 8, 5, 3 | 
| Olivia | 5, 7, 1 | 
+--------+---------+ 

しかし、私は次のように気にいらにそのデザインを変更するrecommand

結果:ここで

+--------+--------+ 
| Name | Number | 
+--------+--------+ 
| May |  5 | 
| Olivia |  5 | 
+--------+--------+ 

Demo1

Demo2

が良いarticleで開始することもあります。

0

は、文字列に数値を格納するためではないいくつかの理由です:

  • SQLは、リストを格納するための偉大なデータ構造を有しています。文字列ではなくテーブルと呼ばれます。
  • SQLに(比較的)ひどい文字列処理機能があります。
  • 一般に、文字列でフィルタを使用するクエリでは、インデックスを使用できません。
  • 数値は適切なデータ型に格納する必要があります。数値は文字列ではなく、数値です。
  • 数値が別の表のIDである場合、外部キー関係を宣言することはできません。

あなただけの文字列に「5」を検索したい場合は、likeを使用することができます。

where numbers like '%5%' 

それは "に「5」と一致しますので、これはおそらく、あなたがやりたいことはありません15 "。これは修正できますが、この方法でデータを格納しない理由を理解してください。あなたが悪いデータベース設計を持って最初に、

Name Number 
Max  3 
Max  7 
Max  9 
John  1 
. . . 
+0

は、これはデータベースです: 名前:私はするために必要なもの5、7、1 :数 最大:3、7、9 ジョン:1、3、4 月:8、5、3 オリビア知っているのはどのようにレコード間の共通数を見つけるのですか?私はそれを前に明らかにしなかったなら、すみません。 –

関連する問題