У меня есть две таблицы в той же базе данных sql-сервера, которая хранит имена приложений и имена пользователей (между прочим) из двух последовательных кварталов. То, что я хочу, - это полное соединение, которое показывает пользователей в таблице A, которые не указаны в таблице B и наоборот.Полное нарушение внешнего соединения
EDIT: И table_a, и table_b содержат две или более записи, в которых имена приложений и имя пользователя имеют одинаковые значения, что делает необходимым DISTINCT. Я отредактировал приведенные ниже примеры, чтобы отразить это.
TABLE_A:
-----------------------
| AppName | Username |
-----------------------
| app1 | jdoe |
| app1 | jsmith |
| app1 | jdoe |
| app2 | jsmith |
-----------------------
TABLE_B:
-----------------------
| AppName | Username |
-----------------------
| app1 | fbar |
| app1 | jsmith |
| app1 | jboehner |
| app1 | fbar |
| app3 | jboehner |
-----------------------
SQL:
SELECT DISTINCT a.username as q2, b.username as q3
FROM tablea as a
FULL JOIN tableb as b
ON a.username = b.username
WHERE a.appname = 'app1'
AND b.appname = 'app1'
Ожидаемый результат:
-----------------------
| q2 | q3 |
-----------------------
| jdoe | |
| jsmith | jsmith |
| | fbar |
-----------------------
| | jboehner |
-----------------------
Фактический результат:
-----------------------
| q2 | q3 |
-----------------------
| jsmith | jsmith |
-----------------------
Что дает?
Не могли вы ПОЛНАЯ OUTER JOIN на a.username = b.username И a.appname = b.appname, а затем положить критерии WHERE постфактум, поскольку вы» ve уже создал набор данных с NULL в соответствующих местах? –
Будет ли SQL Server иметь возможность подталкивать фильтр в отдельные таблицы таким образом? Я использую для ручного нажатия на фильтры в производные таблицы. – usr
@ Love2Learn да, но важная часть заключается в том, что предложение WHERE не может иметь AND для обеих таблиц (это делает его INNER JOIN). –