#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. производительность будет в порядке. если нет, вы можете выполнить приведение, чтобы помочь оптимизатору