5

mysqlで、値が別のテーブルのいくつかのフィールド内にあるかどうかを確認するにはどうすればよいですか?

何かのようなもの

SELECT * FROM table WHERE concat('%',value,'%') NOT LIKE IN(SELECT field FROM anothertable)

でも、それは正しくないと思いますよね?

4

3 に答える 3

2

いいえ、そうではありません。

SELECT * FROM table WHERE NOT EXISTS (
    SELECT * from anothertable WHERE field LIKE CONCAT('%',value,'%')
)

おそらくそれをするでしょう。valueそれがの列であり、サブストリングとして含まれる場合と含まれない場合がある対応する列であるtableと仮定します。fieldanothertablevalue

anothertableただし、注意してください。多くの行が含まれている場合、これは非常に遅いクエリになります。私はあなたを助けることができるインデックスがないと思います。anothertableMySQLは、のすべての行の文字列比較テーブルスキャンを実行する必要がありますtable

于 2012-02-27T21:19:46.703 に答える
2

次のクエリで実行できます。

SELECT DISTINCT t.* 
FROM   table t, 
       anothertable a 
WHERE  a.field NOT LIKE Concat('%', t.`value`, '%'); 
于 2012-02-27T21:22:09.220 に答える
0

私があなたの質問を正しく理解している場合(「anothertable」の2つのフィールド(field1とfield2)のテーブルから値を見つけたいと仮定します):

SELECT * 
FROM table t 
WHERE EXISTS (SELECT Count(*) FROM anothertable WHERE field1 LIKE concat('%',t,value,'%') OR field2 LIKE concat('%',t,value,'%')
于 2012-02-27T21:28:47.037 に答える