mysqlで、値が別のテーブルのいくつかのフィールドに含まれているかどうかを確認するにはどうしたらいいですか?MySQL - 好きではない
SELECT * FROM table WHERE concat('%',value,'%') NOT LIKE IN(SELECT field FROM anothertable)
しかし、私はそれはそれは、かなり右だとは思わないような何か?
mysqlで、値が別のテーブルのいくつかのフィールドに含まれているかどうかを確認するにはどうしたらいいですか?MySQL - 好きではない
SELECT * FROM table WHERE concat('%',value,'%') NOT LIKE IN(SELECT field FROM anothertable)
しかし、私はそれはそれは、かなり右だとは思わないような何か?
次のクエリを実行する必要があります。
SELECT DISTINCT t.*
FROM table t,
anothertable a
WHERE a.field NOT LIKE Concat('%', t.`value`, '%');
いいえ、あまりありません。
SELECT * FROM table WHERE NOT EXISTS (
SELECT * from anothertable WHERE field LIKE CONCAT('%',value,'%')
)
です。 value
がtable
の列であり、field
がanothertable
の対応する列であり、部分文字列としてvalue
を含む場合もあります。
anothertable
に多くの行が含まれていると、これは非常に遅いクエリになります。私はあなたを助けることができるインデックスがあるとは思わない。 MySQLはtable
の行ごとに文字列比較テーブルanothertable
をスキャンする必要があります。
私はそれが遅くなることだろう考え出ししかし、私は一度だけメンテナンスクエリを実行しています。 –
Btw、私はタイプミスのために更新しました - 私は 'LIKE'の代わりにサブクエリに '好きではありませんでした。 –
ええ、私はそのタイプミスをキャッチしました。 –
私が正しくあなたの質問を理解していれば(あなたは「anothertable」の2つのフィールド(フィールド1とフィールド2)のテーブルから値を見つけたいと仮定した場合):
SELECT *
FROM table t
WHERE EXISTS (SELECT Count(*) FROM anothertable WHERE field1 LIKE concat('%',t,value,'%') OR field2 LIKE concat('%',t,value,'%')
これは何らかの方法でより速くまたはより良いでしょうか? –
はい、フィールドと値がインデックス化されていると、はるかに高速になります –
私は2つを比較しましたが、これは最初の4倍高速です。 –