SQLite-選択複数の応募のと同じデータ/カラム
-
20-09-2019 - |
質問
私はビットの新しい SQLite, いわずかにジレンマが自分のデータベースのデザイン。についてご説明させていただき.例えば、皆さんがご友人と使用する異なる愛称は、インターネット(より多くなる場合があります。こだわりのIDのリストの愛称が"この人が利用します。このシングルエントリの大きます。ことを目指店舗このデータをSQLiteで、SELECTステートを取得するために使用できるエディトリアルデザインが含まれる指定された愛称です。
考えないでもありませんでしたテーブルを作成する二つのカラムの最初のID(主キー)およびテキストを保持する愛称は、 CSV 形式です。しかしこの例でわからない書き方の選択算書の検索に合わせ愛称格納されます。
アイデア、浮かぶのでしょうか。
解決
手始めに、ここでの
あなたが持っているものですSELECT Name, Nickname FROM MyTable WHERE Nickname = 'Copper';
しかし、私は強くニックネーム名への参照を有するように、名のテーブル、および使用されるニックネームのテーブルを持つことをお勧めします。
CREATE TABLE Users (
UserId INTEGER PRIMARY KEY,
Name TEXT
);
CREATE TABLE Nicknames (
NickNameId INTEGER PRIMARY KEY,
UserId INTEGER REFERENCES Users(UserId),
NickName Text
);
あなたはなど、それらを削除し、このスキームは、エントリを編集することができ、より多くの制御を与えるでしょう。
INNER JOIN
のいずれかでそれを照会
SELECT Users.Name, NickNames.NickName
FROM Users INNER JOIN NickNames ON User.UserId=NickNames.UserId
WHERE NickNames.NickName = 'Copper';
またはネストされたクエリます:
SELECT Users.Name
FROM Users
WHERE User.UserId IN (
SELECT NickNames.UserId
FROM NickNames
WHERE NickNames.NickName = 'Copper');
の二つはWHERE
句と結合指定する(この場合は)同等です。それははの動作しますが、それが悪いフォーム(それはINNER JOIN
限り明確ではありません)です。
SELECT Users.Name, NickNames.NickName
FROM Users, NickNames
WHERE User.UserId = NickNames.UserId
AND NickNames.NickName = 'Copper';
他のヒント
なぜ、以下の表を持っています:
人(カラム:PERSON_ID、PERSON_NAME)
ニックネーム(カラム:nickname_id、ニックネーム)
Person_Nickname(カラム:PERSON_ID、nickname_id)
次に、あなたは人からPerson_NicknameへとニックネームからPerson_Nicknameへの外部キーを作成します。これは、あなたが好きなように与えられた人は、できるだけ多くのニックネームを持つことができます。
次に、与えられたニックネームに一致するすべての人を見つけるために、あなたが書くことができます:
SELECT p.person_name
FROM person.p
, nickname n
, person_nickname pn
WHERE n.nickname = 'nickname of interest'
AND p.person_id = pn.person_id
AND n.nickname_id = pn.nickname_id
必要な2つのテーブル:
- ユーザー
- 愛称
表"利用者"といid、氏名、その他のオプションの情報をユーザーです。表に"愛称"すいuser_id,愛称です。
ので、多くの協会.次のリストを取得するすべてのユーザーの愛称でクエリではこのような(利用しているユーザid):
SELECT nicknames.nickname FROM nicknames WHERE nicknames.user_id=id
以下のデータベースのように実装できます:
利用テーブルと2つの分野のユーザーネーム、ニックネーム).その一覧を取得してジョーンズ愛称(だわりのidにも関連するユーザーとクエリのようになります:
SELECT table.nickname FROM table WHERE table.user="john"
CSVのアプローチは適切に働きがいを実装する必要があると自機能の追加/削除/パの愛称でほぼ確実に遅くなることの二つの実装いを説明します。