以下に示すように、私は人に関する情報を含むテーブルとスポーツに関する情報を含むテーブルを2つ持っています。セット内の値とファジーマッチに基づいてレコードを返すPostgresクエリ
私は人物テーブルに対してクエリを行い、コストテーブルにリストされているスポーツが記述されているレコードのみを返します。記述にスポーツだけが含まれ、他のテキストは含まれていない場合は、すべてを小文字にした後、簡単に内部結合として行うことができます。しかし、私は説明の追加情報のために考えている、私はサブクエリや正規表現で何かをする必要があります。彼の説明内の単語のどれもコストテーブルのスポーツ欄ではなかったよう
name | age | description
-------+-----+------------------------------------------
bill | 15 | I like to play soccer
bob | 20 | In my free time, I like to play BASEBALL
jim | 25 | I play video games everyday!!
tony | 30 | Im a really big fan of Hockey!!
sandy | 35 | I could play soccer and hockey everyday
sport | cost
----------+------
soccer | 100
baseball | 150
hockey | 200
は最終的には、このクエリは、ジムが含まれていません。次の表を参照して、返します。いくつかの時間スポーツは1つの単語かもしれない、他の回それらは複数の単語かもしれない。スポーツに複数の単語が含まれている場合は、その単語がすべて返されるように説明に含めてください。
name | age | description
-------+-----+------------------------------------------
bill | 15 | I like to play soccer
bob | 20 | In my free time, I like to play BASEBALL
tony | 30 | Im a really big fan of Hockey!!
sandy | 35 | I could play soccer and hockey everyday
私はこれをスポーツごとに個別に行うことができると知っていますが、これを行うにはより良い方法があると思います。
SELECT *
FROM person
WHERE lower(description) LIKE '%hockey%';
name | age | description
-------+-----+-----------------------------------------
tony | 30 | Im a really big fan of Hockey!!
sandy | 35 | I could play soccer and hockey everyday
を使用でき
CREATE TABLE person (name VARCHAR(10), age INT, description VARCHAR(100));
INSERT INTO person (name, age, description) VALUES ("bill", 15, "I like to play soccer")
INSERT INTO person (name, age, description) VALUES ("bob", 20, "In my free time, I like to play BASEBALL")
INSERT INTO person (name, age, description) VALUES ("jim", 25, "I play video games everyday!!")
INSERT INTO person (name, age, description) VALUES ("tony", 30, "Im a really big fan of Hockey!!")
INSERT INTO person (name, age, description) VALUES ("sandy", 35, "I could play soccer and hockey everyday")
CREATE TABLE cost (sport VARCHAR(10), cost INT);
INSERT INTO cost (sport, cost) VALUES ('soccer', 100);
INSERT INTO cost (sport, cost) VALUES ('baseball', 150);
INSERT INTO cost (sport, cost) VALUES ('hockey', 200);