2016-10-12 4 views
1

Мне нужно сопоставить два столбца из двух разных таблиц на основе количества строк, которые у них есть общего. так, например, в первой колонке у меня есть:частичное соответствие строк в sql

================Table 1============================== 
ID  desc    Year  Month 
123 food_drink  2016  8 
345 shoe_bag   2016  8 
678 001_toilet_paper 2015  7 
910 Bags_of_thing 2015  6 

======================table 2====================== 
ID  Name   Year  month 
ad  drink_server 2016  8 
ac  shoe_shiny  2016  8 
aa  white_paper 2015  7 
cc  blue_bags  2015  6 

Есть ли способ объединить две таблицы, вступив на год, месяц и аналогичные строки в описании и названии. Таким образом, сравнивая ДЕСК и имя столбца, чтобы увидеть, если они имеют> = 5 строк в общем, то:

=================================================== 
ID1 ID2 name   desc    Year Month 
123 ad drink server food_drink  2016 8 
678 aa white_paper 001_toilet_paper 2016 7 

В сущности, мне нужен способ, чтобы сравнить количество общих строк между двумя столбцами разных таблиц. Благодарю.

+0

вы можете написать любой 'join' вы хотите - присоединяйтесь пункты просто сводятся к булева истина/ложь: правда = объединение записей, false = no join. но ваши подстрочные совпадения НЕ будут хорошенькими. sql не является хорошим языком для выполнения произвольных манипуляций с строками. Вы бы лучше избегали нормализации таблиц и помещали эти ключевые слова food/drink/server/blah/blah в свой собственный дочерний стол, а затем сопоставление будет тривиальным join + равенство. –

+0

Я не уверен, понимаю ли я. Вы хотите сравнить каждую строку из таблицы1 с каждой строкой из таблицы2, чтобы проверить, имеют ли они в аренду (или точно) 5 общих полей или вы хотите сравнить столбец со столбцом? – Kacper

+0

Какая СУБД вы используете? –

ответ

0

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

Это то, что я хотел бы сделать:

  • Создайте временную таблицу, которая расщепляет поля в слова. Я предполагаю, что идентификатор является ключом в обеих таблицах. Таблицы выглядели бы так:

    ================ Таблица слов1 ====================== ========

    ID1  word 
    123 food 
    123 drink 
    345 shoe 
    345 bag 
    ... 
    

============= стол words2 ================= =====

ID2  word 
    ad  drink 
    ad  server 
    ac  shoe 
    ac  shiny 
    ... 

Теперь вы можете легко найти идентификаторы, которые имеют 5 слов или более общие черты:

SELECT ID1, ID2 FROM words1 JOIN words2 ON (word1.word = words2.word) 
GROUP by ID1, ID2 
having count(*) >= 5; 

После того, как у вас есть ID1 и ID2, вы можете присоединиться к исходным таблицам и получить остальную информацию, которую хотите.

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