2016-05-17 2 views
0

Таблицы А:MySQL присоединиться к колонку с пустым пространством

phone_number 
+123456789000_ 
+123456789001 
+123456789002_ 
+123456789003 
+123456789000 

_ в конце некоторых телефонных номеров представляет собой пустое пространство

Таблицы б:

phone_number 
+123456789000 
+123456789002 

Таблица б содержит phone_numbers из таблицы a, которая имела пробел. Пустое пространство было обрезано.

Мне нужно проверить, не был ли телефон дважды добавлен в таблицу a (один с символом пробела и без пробела).

Я пробовал:

SELECT a.phone_number FROM a 
JOIN b ON a.phone_number = b.phone_number; 

Но он возвращает все существующие телефонные номера в б. Что я хотел получить из приведенного выше примера: +123456789000

Спасибо.

+1

Обновить таблицу, удалить эти зацепленные заготовки! (Sanitize your data!) – jarlh

+2

Если вы хотите проверить, был ли телефон добавлен дважды в таблицу 'A', зачем вам нужна таблица' B'? –

+0

Если вы хотите получить числа, которые находятся в таблице b, а также присутствовать в таблице a, вы можете использовать 'SELECT a.phone_number FROM a WHERE a.phone_number IN (SELECT b.phone_number FROM b)'. – ZeusNet

ответ

3

Вы должны сделать автообъединение вместо:

SELECT t1.phone_number 
FROM a AS t1 
JOIN a AS t2 ON t1.phone_number = CONCAT(t2.phone_number, '_'); 

Edit:

предыдущий запрос выглядит для символа подчеркивания в a таблице. Для обнаружения повторяющихся телефонных номеров на основе трейлинг космических символов вы можете использовать этот запрос вместо:

SELECT phone_number 
FROM a 
GROUP BY RTRIM(phone_number) 
HAVING COUNT(*) > 1 

Demo here

+0

Я не думаю, что это сработает. Может быть, я не был таким ясным. Итак, в таблице у меня есть уникальные phone_numbers, но некоторые из них были добавлены с завершающим пробелом. Мне нужно найти, был ли телефон дважды добавлен в таблицу a (один с символом пробела и без символа пробела). Таблица B на самом деле не нужна Спасибо – andresg3

+0

@ andresg3 Ну, это работает с данными примера. Если это не так, то можете ли вы описать, каков ожидаемый результат? –

+0

@ andresg3 Пожалуйста, проверьте внесенные изменения. –

1

Вы можете использовать trim function удалить пробелы при вступлении.

SELECT b.phone_number, count(*) as cnt 
FROM b 
JOIN a ON TRIM(a.phone_number) = b.phone_number 
GROUP BY b.phone_number 
HAVING cnt > 1; 
+1

Возможно, вы захотите «GROUP BY» –

+0

Действительно. Благодарю. –

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