2016-10-04 3 views
0

Мне нужно объединить 2 таблицы на основе идентификатора клиента.MYSQL Внутренние результаты соединения пустые

Мои таблицы table1 = 'vbq-клиентов и Table2 = 'vbq Постпродажный'

Столбцы Table1 являются: customer_id | Первое имя | last_name и т. д. Столбцы таблицы 2: Receipt_nb | rece_date | receipt_customer_code и т.д ..

Я хочу присоединиться на customer_id = receipt_customer_code

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

BEGIN 

DROP TABLE `vbq-sales-customers`; 
CREATE TABLE `vbq-sales-customers` 
AS 

(SELECT * 
    FROM `vbq-sales` 
    INNER JOIN `vbq-customers` 
    ON `vbq-sales`.receipt_customer_code=`vbq-customers`.Customer_id 

); 

END` 

Может ли кто-нибудь помочь мне разобраться в том, что мне здесь не хватает?

+0

Показать данные примера – Jens

+0

Если вы не указали нам данные таблицы, мы не можем сказать ничего точно. –

+0

OK Я обновляю свой вопрос. – SamanthaAlexandria

ответ

0

Пара возможностей. Проще всего объяснить, что одна (или обе) из таблиц пусты, содержат нулевые строки.

Или нет строк, которые «соответствуют». В vbq-sales нет строк, которые имеют значение в таблице receipt_customer_code, которое равно значению в столбце Customer_idvbq-customers.

Мы не видим тип данных ни одной из этих столбцов. Там может неявное преобразование данных происходит , или мы могли бы фиксированной длины CHAR столбцы различной длины (которые не будут равны.) (Doh! Пожалуйста, простите мой Oracle.)

Без определения таблиц, мы просто догадываемся.

Я настоятельно рекомендую вам протестировать только запрос (т. Е. Просто инструкцию SELECT), прежде чем вставлять его в инструкцию CREATE TABLE AS. Вы не указываете, что есть какая-либо ошибка при создании таблицы, поэтому мы проигнорируем другие причины, из-за которых может возникнуть ошибка CREATE TABLE.


Я не знаю, что случилось с BEGIN и END. Это показало, что это был анонимный блок в Oracle. Но обратные ссылки вокруг идентификаторов - это очень MySQL. Это пустая коллекция синтаксиса.

Если проблема заключается в том, что запрос SELECT возвращает нулевые строки, просто отлаживайте это. Избавьтесь от всех CREATE TABLE AS и всего остального.

Чтобы проверить фактическое содержимое, хранящееся в столбцах, вы можете использовать функцию HEX() ... тогда все, включая непечатаемые символы, будут печатными символами 0-9A-F, которые вы можете посмотреть более внимательно.

Я подозреваю, что у вас могут быть некоторые непечатаемые символы в одном из значений, например. tab x'09', newline x'0A', возврат каретки x'0D' и т. д.

+0

Привет Спенсер: Тип данных - VARCHAR (50). Я запросил обе таблицы по значению, которое соответствует. Но соответствующая строка не отображается с моим кодом. – SamanthaAlexandria

+0

Выполняет ли SELECT само по себе любые строки? Вы уверены, что в значениях нет никаких «скрытых» символов (вкладка, новая линия, возврат каретки и т. Д.)? Если вы не используете функцию DUMP() в стиле Oracle, вы можете использовать функцию HEX() для проверки значения в столбцах .... 'SELECT HEX (c.customer_id) FROM \' vbq-customers \ 'WHERE c.customer_id LIKE ' abc% 'LIMIT 1'; – spencer7593

+0

Я протестировал запрос самостоятельно, без CREATE, и он работает .. но он ничего не показывает. – SamanthaAlexandria

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