2016-06-17 4 views
0

Это для MSQL2012 экземпляраПрисоединяйтесь к иерархии продуктов в таблицу клиентов

я в настоящее время вопрос присоединения к таблице данных клиента к hierarcy, моя цель состоит в том, чтобы получить выходную таблицу, которая показывает, что они не владеют на Первый уровень.

У меня возникли проблемы с идентификатором клиента, так как при сравнении таблиц выходы перекрываются и дают исключения для всех клиентских идентификаторов, а не для каждого идентификатора клиента

Может кто-нибудь помочь мне в создании синтаксис этот тип проблемы?

product_data 
    Level 1, Level 1 Name, Level 2, Level 2 Name 
     1   Fruit   2  Apple 
     1   Fruit   3  Banana 
     1   Fruit   4  Orange 
     5   Vegetable  6  Potato 
     5   Vegetable  7  Celery 

client data 
    Client ID, Level 1, Level 1 Name, Level 2, Level 2 Name 
     1  1   Fruit   2  Apple 
     1  1   Fruit   3  Banana 
     2  5   Vegetable  5  Potato 
     2  1   Fruit   4  Orange 

Desired Output 
    Client ID, Level 1, Level 1 Name, Level 2, Level 2 Name 
     1   1  Fruit   4  Orange 
     2   1  Fruit   2  Apple 
     2   1  Fruit   3  Banana 
     2   5  Vegetable  7  Celery 

Спасибо!

+0

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

+0

MSQL Management Studio 2012 – Bradders

+0

ваш дизайн таблицы очень нетрадиционный. Вам нужно объяснить эти две таблицы продукта и данных клиента вместе с именем столбца. Вам также нужно объяснить вывод. – KumarHarsh

ответ

0

Попробуйте

SELECT cln1.ClientID, cln1.Level1, cln1.Level1Name, prd.Level2, prd.Level2Name 
FROM product_data prd 
INNER JOIN client_data cln1 
    ON prd.Level1 = cln1.Level1 
LEFT JOIN client_data cln2 
    ON cln1.ClientId = cln2.ClientId 
    AND prd.Level1 = cln2.Level1 
    AND prd.Level2 = cln2.Level2 
WHERE cln2.Level2 IS NULL 
+0

Не могли бы вы помочь мне с методологией, стоящей за этим, пожалуйста? Так как мне нужно было бы реализовать его на нескольких уровнях, в противном случае, это даст мне некоторые обнадеживающие результаты, спасибо! – Bradders

+0

Первое внутреннее соединение - это получение данных, которые пересекаются (существует в обеих таблицах) на уровне 1. Это довольно просто. Теперь, когда мы установили, у которых есть записи о продуктах и ​​клиентах, у клиентов которых есть пункты 1-го уровня, нашим следующим шагом будет проверка предметов уровня 2. Однако здесь вывод не является тем, что клиент имеет на уровне 2, а тем, что у клиента нет. Итак, как мы получаем то, чего не имеет клиент, объединив два набора? Это в основном, когда приходит LEFT JOIN. Он присоединяется к таблице в левом соединении с указанным выше параметром независимо от того, существует ли запись или нет. – Sam

+0

Если какая-либо запись или столбец соединения не существует в таблице в левом соединении, SQL SERVER просто поместит значение null в этот столбец. Следовательно, проверка уровня 2 IS NULL в условии WHERE. Я знаю, что это объяснение может быть немного запутанным, но вот пример, если вы хотите попробовать и посмотреть. http://www.w3schools.com/sql/trysql.asp?filename=trysql_select_join_left – Sam

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