mysqlで、値が別のテーブルのいくつかのフィールド内にあるかどうかを確認するにはどうすればよいですか?
何かのようなもの
SELECT * FROM table WHERE concat('%',value,'%') NOT LIKE IN(SELECT field FROM anothertable)
でも、それは正しくないと思いますよね?
mysqlで、値が別のテーブルのいくつかのフィールド内にあるかどうかを確認するにはどうすればよいですか?
何かのようなもの
SELECT * FROM table WHERE concat('%',value,'%') NOT LIKE IN(SELECT field FROM anothertable)
でも、それは正しくないと思いますよね?
いいえ、そうではありません。
SELECT * FROM table WHERE NOT EXISTS (
SELECT * from anothertable WHERE field LIKE CONCAT('%',value,'%')
)
おそらくそれをするでしょう。value
それがの列であり、サブストリングとして含まれる場合と含まれない場合がある対応する列であるtable
と仮定します。field
anothertable
value
anothertable
ただし、注意してください。多くの行が含まれている場合、これは非常に遅いクエリになります。私はあなたを助けることができるインデックスがないと思います。anothertable
MySQLは、のすべての行の文字列比較テーブルスキャンを実行する必要がありますtable
。
次のクエリで実行できます。
SELECT DISTINCT t.*
FROM table t,
anothertable a
WHERE a.field NOT LIKE Concat('%', t.`value`, '%');
私があなたの質問を正しく理解している場合(「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,'%')