2014-10-24 2 views
0

У меня есть стол с тремя колонками: id, first и last.Как найти подстроку в одном из двух полей таблицы

Я бы хотел найти все записи, где «SAM» находится в первом или последнем поле.

Я не специалист по MySQL, но мне кажется, что одно поле может быть запрошено с помощью оператора LIKE.

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

Я попытался это:

SELECT id 
FROM `employees` 
WHERE 'first' like 'SAM' OR 'last' like 'SAM' 

Но я получаю сообщение «У вас есть ошибка в вашем SQL синтаксиса, проверьте руководство, которое соответствует Вашей версии сервера MySQL для правильного синтаксиса.»

ответ

1

Я не могу понять, почему вы получаете синтаксическую ошибку, но одна проблема с вашим запросом заключается в том, что, помещая одинарные кавычки вокруг имени столбца, он обрабатывается как строковый литерал вместо имени столбца.

Что я имею в виду под этим, вместо сравнения значения в столбце first со строкой «SAM», это сравнение двух строк: «первый» и «SAM», которые отличаются друг от друга. Этот запрос не вернет никаких результатов.

Кроме того, это будет работать только в том случае, если первое или фамильное имя равно sam. Чтобы проверить эти символы как подстроку в любой точке, я бы добавил подстановочные знаки в начале и в конце строк.

Попробуйте это:

SELECT id 
FROM employees 
WHERE first LIKE '%SAM%' OR last LIKE '%SAM%' 

Вот SQL Fiddle, чтобы показать, как это работает.

+1

очень ценится! – user61629

+0

Не проблема. У вас есть весь запрос, который вы пробовали в начале? Возможно, синтаксис является результатом чего-то, что не было скопировано. Возможно, у вас было слово с ошибкой или отсутствующее ключевое слово. В любом случае, пока вы сейчас работаете, я рад, что смогу помочь. – AdamMc331

1

Я не вижу никакой синтаксической ошибки в запрошенном вами сообщении. То, что у вас есть, действительно близко.

Ваш запрос не сравнивает содержимое столбцов; это сравнение строковых литералов, из-за одиночных кавычек, это строки, а не ссылки на столбцы.

Сравнение эквивалентно сравнению равенства, так как в строке справа нет никаких подстановочных знаков. Символ '%' - это подстановочный знак, который будет соответствовать любому количеству символов.

Для возврата строки, в которых либо из столбцов first или last содержат строку «SAM», вы могли бы сделать что-то вроде этого:

SELECT e.id FROM employees e WHERE e.first LIKE '%SAM%' OR e.last LIKE '%SAM%' 

Этот запрос будет соответствовать любому из этих примеров строк:

id first  last 
-- --------- ------- 
2 Flotsam 
3 Samson 
5 Sesame 
7 Yosemite Sam 
+0

* Я не вижу никакой синтаксической ошибки в запрошенном вами сообщении * Имена столбцов цитируются. –

+0

Большое спасибо, что очень помогает. – user61629

+1

@ Объясните, что имена столбцов, которые цитируются, не являются синтаксической ошибкой. Конечно, это проблема, но у MySQL нет причин отклонять это. – AdamMc331

Смежные вопросы