2013-09-30 3 views
0

Я искал, но не могу найти ответ, который точно соответствует моим потребностям. У меня есть два набора данных и вам нужно сравнить кусочек первого (столбец описания 1) со списком (таблица 2) и вернуть VIP-коды для каждого интерфейса/заказа.Сравнение данных в mySQL

Единственный идентификатор, который является одним и тем же для любого из описаний, - это 9-значный идентификатор заказа, который заканчивается на '003'. Мне нужно сравнить эту 9-значную строку с другой таблицей, которая всегда будет начинаться с идентификатора заказа, но впоследствии может содержать другие символы или числа. Я знаю, что сравнение LIKE будет работать для второй таблицы, но я не могу понять, как удалить номера заказов из поля описания.

UPDATE: Таблица 1 представляет собой временную таблицу, сравнивающую вывод команды интерфейса маршрутизатора. Таблица 2 - это моя статическая база данных учетных записей, в которой есть десятки тысяч записей, которые я не хочу сравнивать с таблицей. Вот почему я не просто беру таблицу два и сравниваю номера заказов с таблицей 1. Я специально просит помощи таким образом, чтобы извлечь порядка 9 цифр ID из описания поля таблицы 1.

Таблица 1

Interface Description 
Ge 1/0/1  blah_bla_123456003_blahlahlah 
Ge 1/0/2  blah_blah_bla_234567003_blahahblh 
Ge 1/0/3  b_bla_345678003_blhahblah 
Ge 1/0/4  bh_blh_ba_456789003_lahlahbl 

Таблица 2

Order ID  VIP Code 
123456003.0 Premier 
234567003  Wholesale 
345678003.6 Normal 
456789003.23 Premier 

Ожидаемые результаты

Order*  VIP Code 
123456003  Premier 
234567003  Wholesale 
345678003  Normal 
456789003  Premier 

*(stripped from Description) 
+0

Это действительно проблематичный схема базы данных. Если вам нужно присоединиться к этим таблицам, вы должны сделать для них что-то доступное для этого (возможно, для автоинкрементного первичного ключа). –

+0

Насколько сложно просмотреть список строковых функций в документации MySQL и найти те, которые получают первые 9 символов столбца? http://dev.mysql.com/doc/refman/5.5/en/string-functions.html – Barmar

+0

Мне нужно сравнить таблицу 1 с таблицей 2. Я уже знаю, как получить самые левые 9 символов из таблицы 2, однако таблица два на самом деле - десятки тысяч записей, и я бы предпочел не сбрасывать весь этот список с Таблицы 1, который составляет 50-100 записей. поэтому я прошу о том, чтобы вытащить нужную 9-значную строку из поля описания в таблице 1 вместо того, чтобы просто изгнать тысячи записей из таблицы 2 в таблицу 1 с похожим запросом. – James

ответ

1

Если вы хотите взять первые 9 цифр идентификатора из Таблицы 2, вы можете использовать left(table2.id,9). Он вернет 9 первых (левых) символов из этого поля.

Затем вы можете использовать это с LIKE (с использованием «%» подстановочные) или с использованием регулярных выражений.

+0

К сожалению, таблица 2 в действительности - десятки тысяч записей. Таблица 1 - это сто или около того интерфейсов, сбрасываемых с моего маршрутизатора. Поэтому было бы крайне неудобно перейти от таблицы 2 к таблице 1. – James

0

Почему не хранить данные, которые вам нужны, в отдельной колонке в каждой таблице? Сделайте это столбцом номера и проиндексируйте его, тогда вы можете сделать очень эффективный JOIN, используя этот столбец.

SELECT * FROM Table_1 LEFT JOIN Table_2 USING(common_index) 
0

вы можете вы что-то вроде этого:

select TRUNCATE(tbl2.orderId,0) orderNum, tbl2.vipcode, tbl1.interface 
from table2 tbl2 , table1 tbl1 
WHERE tbl1.description like CONCAT('%',TRUNCATE(tbl2.orderId,0),'%'); 

я сделал скрипку here

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