C # SQL INSERT INTO запрос и отображение результата - PullRequest
1 голос
/ 15 ноября 2011

Я использую VS2005 и SQL Server 2005.

Я пытаюсь выполнить несколько INSERT INTO операторов SQL, которые соединяют таблицы 3 sql.

3 таблицы:

  • Table1: UserID, Username
  • Table2: UserID, Status
  • Table3: UserID, Username, Issue

Ниже приведены проверки, которые мне нужно выполнить:

  1. Пользователи, которые существуют в Table1, должны существовать в Table2

  2. Пользователи, которые существуют в Table1, не должны иметь STATUS=DELETE в Table2

  3. Пользователи, у которых нет STATUS=DELETE в Table2, должны существовать в Table1

В настоящее время у меня есть только оператор SELECT, который выполняет 3 вышеупомянутых запроса, без добавления в 3-ю таблицу:

SELECT *
FROM table1 t1
FULL OUTER JOIN table2 t2 ON t1.userid = t2.userid
WHERE (t2.userid IS NULL AND t1.userid IS NOT NULL)
OR (t2.status = 'DELETE' AND t1.userid IS NOT NULL)
OR (t2.userid IS NOT NULL AND t2.status <> 'DELETE' AND t1.userid IS NULL)

Я хотел бы, чтобы для каждой проверки, указанной выше, INSERT результаты в Table3 с уникальной переменной ISSUE (например, для проверки № 1, ISSUE=User exist in t1 but not t2)

В настоящее время я пытаюсь сформировать запрос, который соединяет 3 таблицы вместе, и для каждого результата, найденного первой проверкой, t2.userid IS NULL AND t1.userid IS NOT NULL, он вставит новую строку в Table3. Но у меня возникли некоторые проблемы с запросом SQL.

INSERT INTO Table3 (userid, username, issue) 
VALUES (t1.userid, t1.username, 'user not found in t2')
FULL OUTER JOIN table2 t2 ON t1.userid = t2.userid
WHERE (t2.userid IS NULL AND t1.userid IS NOT NULL)

Большое спасибо за помощь.

Ответы [ 2 ]

2 голосов
/ 15 ноября 2011
1.
    Insert in to Table3(userid,issue)
        SELECT t1.userid,'check no.1'
        FROM table1 t1
        FULL OUTER JOIN table2 t2 ON t1.userid = t2.userid
        where t1.userid not null and t2.userid is null
2.
    Insert in to Table3(userid,issue)
        SELECT t1.userid,'check no.2'
        FROM table1 t1
        inner JOIN table2 t2 ON t1.userid = t2.userid
        where t2.status = 'DELETE'

3.
    Insert in to Table3(userid,issue)
        SELECT t2.userid,'check no.3'
        FROM table1 t1
        right outer JOIN table2 t2 ON t1.userid = t2.userid
        where t2.status = 'DELETE' and t1.userid is null
2 голосов
/ 15 ноября 2011

У меня нет этих таблиц для тестирования, поэтому синтаксис будет близок:

COALESCE для UserId обеспечит вставку значения в столбец, поскольку вы неконечно, если значение будет в Table1 или в Table2

, я просто использовал ваши выражения where для операторов CASE для заполнения столбца Issue.Вы можете обновить текст в соответствии с вашими требованиями.

INSERT INTO Table3(UserId, Username, Issue)
SELECT COALESCE(t1.UserId, t2.UserId), t1.UserName
   , CASE
        WHEN (t2.userid IS NULL AND t1.userid IS NOT NULL)
           THEN 'User exists in t1 but not in t2'
        WHEN (t2.status = 'DELETE' AND t1.userid IS NOT NULL)
           THEN 'User Exists in t1, but status in t2 is not DELETE'
        WHEN (t2.userid IS NOT NULL AND t2.status != 'DELETE' AND t1.userid IS NULL)
           THEN 'Non-Deleted user in t2 does not exist in t1'
     END
FROM table1 t1
FULL OUTER JOIN table2 t2 ON t1.userid = t2.userid
WHERE (t2.userid IS NULL AND t1.userid IS NOT NULL)
   OR (t2.status = 'DELETE' AND t1.userid IS NOT NULL)
   OR (t2.userid IS NOT NULL AND t2.status != 'DELETE' AND t1.userid IS NULL)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...