У меня есть две таблицы, одна из которых имеет 2-значный customerId
целочисленный столбец и другой, который имеет целочисленный столбец transactionId
. Вторая и третья цифры столбца transactionId
соответствуют customerId
с. Я хотел бы выполнить объединение в двух таблицах с помощью «соответствия» transactionId
и customerId
в качестве условия соединения. Что-то вродеСинтаксис соединения условия для сравнения последовательности цифр
customerId LIKE '_transactionId%
Возможно ли это?
Какие типы данных являются этими полями? Является ли ваше использование 'LIKE' подразумевающим, что это фактически поля VARCHAR, которые просто содержат целые числа? Или это действительно тип данных INT? Должно быть, это нужно быть быстрым, или это просто одноразовый, который может быть медленным, но простым для кодирования? Можете ли вы вообще изменить схему? * (В вашем описании подразумевается, что должен быть составной ключ, состоящий как минимум из двух полей, а не одно поле, содержащее несколько значений, зажатых вместе) * – MatBailie
Они целые, но могут быть изменены как VARCHAR. Будет ли создание таблицы с ними, как VARCHAR, повысить эффективность? То есть, это случай типов данных INT в типах VARCHAR, когда мы используем LIKE? – kevin
В этом конкретном случае вы, скорее всего, увидите преимущество использования VARCHAR вместо INT. Это происходит потому, что они действительно должны быть неявно принуждены к VARCHAR, чтобы заставить оператора LIKE действовать на них, и это принуждение запрещает ядро базы данных использовать любые индексы. Если они/были VARCHAR, тогда у вас может быть что-то вроде 'transactionId IN (CONCAT ('0', customerId), CONCAT ('1', customerId), CONCAT ('2', customerId), ... CONCAT ('9 ', customerId)). Но это оптимизация для слабого шаблона проектирования. – MatBailie