MySQL - НЕ В НРАВИТСЯ - PullRequest
       22

MySQL - НЕ В НРАВИТСЯ

5 голосов
/ 28 февраля 2012

Как я могу в mysql проверить, находится ли значение внутри ряда полей в другой таблице?

Что-то вроде

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

Но я не думаю, что это правильноне так ли?

Ответы [ 3 ]

2 голосов
/ 28 февраля 2012

Следующий запрос должен это сделать.

SELECT DISTINCT t.* 
FROM   table t, 
       anothertable a 
WHERE  a.field NOT LIKE Concat('%', t.`value`, '%'); 
2 голосов
/ 28 февраля 2012

Нет, не совсем.

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

, вероятно, сделает это.Предполагая, что value является столбцом в table, а field является соответствующим столбцом в anothertable, который может содержать или не содержать value в качестве подстроки.

Будьте предупреждены, хотя -это будет очень медленный запрос, если anothertable содержит много строк.Я не думаю, что есть индекс, который может вам помочь.MySQL придется сканировать таблицу сравнения строк anothertable для каждой строки в table.

0 голосов
/ 28 февраля 2012

Если я правильно понимаю ваш вопрос (при условии, что вы хотите найти значение из таблицы в 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,'%')
...