0

2つのテーブルaとbがあります。

テーブルaには、文字列に含まれる複数の値を持つことができるgrという名前のフィールドがあります。

表bは、フィールドlgに個別に保持しています。

以下のクエリを実行して、b.lgがa.grにあるかどうかを確認するにはどうすればよいですか?

これで、b.lgの値はme、me01、me02になり、a.grをagianstme02でチェックする必要があります。

しかし、ここでのエラーは、これと一致する3つです

SELECT lg 
FROM a, b 
WHERE a.id = 22 AND  
      a.gr LIKE CONCAT('%', b.lg, '%');

a.grの値の例

  1. 'm301、you、weall'

  2. 「私、あなた、私2」

  3. '自分'

b.lg値

1.「m301」

2.「あなた」

3.「weall」

4.「me2」

5.「私」

6.「me1」

4

2 に答える 2

1

LOCATEまたはFIND_IN_SET関数を使用できます。LOCATEは部分一致を検索します。たとえば、で一致するものが見つかりmeますme1,me2。これがあなたが望むものでない場合、多分あなたは探していFIND_IN_SETます。

SELECT lg 
FROM a, b 
WHERE a.id = 22 AND  
      LOCATE(b.lg, a.gr) > 0;

投稿したデータの複製は、SELECTからの出力です。

mysql> create temporary table a (gr varchar(100));
Query OK, 0 rows affected (0.36 sec)

mysql> create temporary table b (lg varchar(100));
Query OK, 0 rows affected (0.08 sec)

mysql> insert into a values ('m301,you,weall'),('me,you,me2'),('me');
Query OK, 3 rows affected (0.11 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> insert into b values ('m301'),('you'),('weall'),('me2'),('me'),('me1');
Query OK, 6 rows affected (0.06 sec)
Records: 6  Duplicates: 0  Warnings: 0

mysql> SELECT lg, gr  FROM a, b WHERE locate(lg,gr) > 0;
+-------+----------------+
| lg    | gr             |
+-------+----------------+
| m301  | m301,you,weall |
| you   | m301,you,weall |
| you   | me,you,me2     |
| weall | m301,you,weall |
| me2   | me,you,me2     |
| me    | me,you,me2     |
| me    | me             |
+-------+----------------+
7 rows in set (0.02 sec)
于 2012-07-25T12:55:20.260 に答える
1

FIND_IN_SET()この関数を使用して2つのテーブルを結合することをお勧めします。

次のようなものを試してください。

select b.lg
from a
inner join b on find_in_set(b.lg,a.gr) > 0
where a.id = 22;
于 2012-07-25T14:44:53.973 に答える