Запрос связанных данных на основе аналогичного оператора

у меня две таблицы

Таблица 1: Столбец A (varchar)

Таблица 2: столбец B (varchar)

Мне нужно получить все строки из T2, где ColumnB «похож» на любую из строк из «ColumnA%». Например, строки в T1 могут быть такими:

  • Лето09
  • Осень09

в то время как строки в T2 могут быть

  • Spring09 Com101 Sec1
  • Summer09 Stat400 сек2
  • Fall09 CS200 сек3

В этом случае будут перенастроены строки Stat400 и CS200. Есть ли способ сделать это в одном операторе SQL?


person Jason    schedule 15.07.2009    source источник


Ответы (2)



SELECT T2.*
FROM T1, T2
WHERE T1.ColumnB LIKE T2.ColumnA + '%'

or


SELECT T2.*
FROM T1
INNER JOIN T2 ON T1.ColumnB LIKE T2.ColumnA + '%'

Скорее всего не очень быстро бегает.

person Matthew Groves    schedule 15.07.2009
comment
Вы также можете добавить пробелы, чтобы учесть одно значение ColumnA, содержащее другое значение ColumnA. Например, если бы были Fall09 и Fall091, то Fall09 связался бы с обоими наборами в таблице 2. Вероятно, в этой ситуации нет проблемы, поскольку число дополнено нулями, но я видел эту проблему раньше. - person Tom H; 16.07.2009

этот вопрос указывает на плохой дизайн таблицы. мой хороший друг Кодд всегда говорил: не объединяйте несколько фрагментов информации в один столбец!

t1 coulm должен быть разделен, поэтому семестр и / или год должны быть отдельными столбцами с FK в таблице t2, где информацию о классе можно найти с помощью индекса, а не медленного LIKE !!

person KM.    schedule 15.07.2009
comment
Я полностью согласен. К сожалению, это стороннее приложение, в которое мы добавляем функциональность. Так что реинжиниринг БД на самом деле не вариант - person Jason; 16.07.2009