MySQL - НЕ В НРАВИТСЯ
Как я могу в mysql проверить, находится ли значение внутри ряда полей в другой таблице?
Что-то вроде
SELECT * FROM table WHERE concat('%',value,'%') NOT LIKE IN(SELECT field FROM anothertable)
Но я не думаю, что это правильно, не так ли?
3 ответа
Решение
Следующий запрос должен сделать это.
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 должен будет сканировать таблицу сравнения строк anothertable
для каждого ряда в table
,
Если я правильно понимаю ваш вопрос (если вы хотите найти значение из таблицы в 2 полях (field1 и field2) в "anothertable"):
SELECT *
FROM table t
WHERE EXISTS (SELECT Count(*) FROM anothertable WHERE field1 LIKE concat('%',t,value,'%') OR field2 LIKE concat('%',t,value,'%')