Объединить 2 таблицы на основе имени столбца в строке таблицы - PullRequest
0 голосов
/ 29 декабря 2018

У меня есть таблица с именем Target, где у меня есть 5 столбцов:

ProductLevel
ProductName
CustomerLevel
CustomerName
Target

В другой таблице с именем Products у меня есть 3 столбца:

ProductId
ProductCategory
ProductBrand

В 3-й таблице под названием Customer Iесть 3 столбца:

CustomerID
CustomerName
SubCustomerName

Есть ли способ сделать динамическое соединение, где я выберу столбец, который буду использовать в JOIN, на основе значения, которое у меня есть в 1-й таблице?

Пример: если в первой таблице у меня есть Category в ProductLevel, я присоединюсь к таблице product, используя поле ProductCategory.Если у меня есть Brand, я присоединюсь, используя ProductBrand ... То же самое происходит с таблицей Customer.

PS: я ищу способ создать его динамически, чтобы я мог добавить в него новые столбцы.таблиц без изменения моего кода, тогда в будущем я могу иметь столбец ProductSegment в Product Table и Segment в качестве значения в ProductLevel в Target table.

1 Ответ

0 голосов
/ 29 декабря 2018

Да, вот так:

SELECT * FROM
  Target t
  INNER JOIN
  Product p
  ON
    (t.ProductLevel = 'Category' AND t.??? = p.ProductCategory)
    OR
    (t.ProductLevel = 'Brand' AND t.??? = p.ProductBrand)

Вы не сказали, в каком столбце в Target содержится ваша категория / марка продукта, следовательно, ???в запросе выше.Заменить ???с чем-то разумным

PS;вы не можете делать то, что просите в своем PS, и даже приведенная выше структура является показателем того, что ваша модель данных нарушена.Вы можете по крайней мере вставить код для него сейчас, даже если нет строк с t.ProductLevel = 'Segment'

Не ожидайте, что это будет работать хорошо или масштабироваться. Возможно, вы сможете улучшить производительностьделая это как набор запросов UNION, а не как OR, но вы можете столкнуться с проблемами, когда индексы не используются, что снижает производительность

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...