2016-07-06 3 views
1

Я пытаюсь проверить один столбец подстроку в других столбцахSQL Проверьте столбец подстрока другого столбца

TABLE1

FullName    
Johns Doue    
Johnny     
Betty Smith, Chair  

table2

Name  
John 

использованием таблица2 чтобы увидеть, является ли это подстрокой таблицы1. он должен вернуть Джона Доу и Джонни.

SELECT * FROM table1.FullName AS table1  
JOIN table2.Name AS table2  
WHERE table2.Name LIKE SUBSTRING(table1.FullName, 0, 10); 

это не соответствует нулю. Я не уверен, что я делаю неправильно. По моей логике кажется, что он принимает результаты из table2.name и сравнивается с подстроками таблицы1.FullName.

ответ

1

Вот один вариант с использованием join с like и concat:

select * 
from table1 as t1 
    join table2 as t2 on t1.FullName like concat('%',t2.name,'%') 

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

+0

Я уже сделал это, но его все еще дает мне результаты пустой строки Thats по сравнению с другой пустой строкой. – user2113896

+0

или что-то заполнено в t1.fullname, но его сравнивают с t2.name, а t2.name - null. ** ПолноеИмя ** джон Doue ** имя ** (пусто) – user2113896

+0

@ user2113896 - угадывание здесь немного, но как только добавление 'where' критерии для устранения пустых значений? http://sqlfiddle.com/#!9/290973/2 – sgeddes

2

Вы должны поместить символы в LIKE шаблон, чтобы сделать его подстроки. Вы также, кажется, путаете имена таблиц и столбцов в своем синтаксисе SELECT.

SELECT * 
FROM table1 AS t1 
JOIN table2 AS t2 
WHERE t1.FullName LIKE CONCAT('%', t2.Name, '%') 

Вы также можете использовать LOCATE вместо LIKE

SELECT * 
FROM table1 AS t1 
JOIN table2 AS t2 
WHERE LOCATE(t2.Name, t1.FullName) > 0 

DEMO

+0

Я сделал первый запрос, но t2.name в результате null – user2113896

+0

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

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