Может ли соединение mysql выполняться для разных типов данных

#mysql #join #sqldatatypes

#mysql #Присоединиться #типы sqldatatypes

Вопрос:

Предположим, у нас есть две таблицы, таблица A (родительская) и таблица B (дочерние) с отношением «один ко многим» между ними, установленным через parent_id поле (VARCHAR (100)) в таблице B.

Тип данных поля parent_id отличается от поля id (INT(11)) в таблице A. Итак, вопрос в том, может ли запрос MYSQL JOIN возвращать правильные записи?

Я столкнулся с подобной ситуацией. Я выполняю следующий запрос:

  SELECT p.payment_amount, s.company_name
 FROM payments p 
 LEFT JOIN suppliers s ON p.supplier_id = s.id 
 LIMIT 5
 

Здесь один поставщик имеет несколько платежей. Теперь этот запрос возвращает мне 5 записей, в которых я вижу payment_amount для всех 5 записей, но я вижу company_name только для тех записей, которые имеют длину p.supplier_id в одну цифру. Если в базе данных я изменяю p.supplier_id на любой действительный 2-значный идентификатор, я не могу получить запись поставщика.

Комментарии:

1. Да, попробовал схему в одном из моих проектов, но она не работает.

2. Пожалуйста, отправьте запрос, который вы пробовали, и что означало «не работает». Также опубликуйте примерные значения в вашем столбце varchar (включая указание пробелов), или этот вопрос будет закрыт.

3. Если вы включите parent_id в STR при условии соединения?

4. @Bohemian добавил подробности

Ответ №1:

MySQL может объединяться с разными типами данных, но производительность низкая, поскольку для каждой строки требуется преобразование из одного типа в другой.

Я настроил быструю скрипку SQL, чтобы продемонстрировать, что она работает, на основе вашего SQL выше:-

http://www.sqlfiddle.com /#!2/f7d02a/1

Обратите внимание, что начальный символ в числе, хранящемся в строке, приведет к тому, что он будет оценен в 0.

Комментарии:

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