kedar001 Ответов: 2

Левое соединение не показывает правильных записей


Select DI.*, C.* from  Table1 DI LEFT join Table2 C on dI.Key=C.Key
								  ANd (Di.Status <16  OR Di.Status =36 OR DI.Status =40) AND (DI.UserID=@userID OR C.UserID=@UserID)
								  where  DI.Department = @Department


мне нужен результат как из таблицы 1, так и из таблицы 2, где UserID=@UserID

Что я уже пробовал:

приведенный выше запрос показывает результат из таблицы 1, где userID не равен @UserID, то есть для ключа 101 запись не существует в таблице 2 и UserID не равен @UserID

2 Ответов

Рейтинг:
2

#realJSOP

Вы должны указать в предложении select, из каких столбцов table.columns (используя указанные псевдонимы) вы хотите получить данные.

SELECT DI.*, C.* FROM...


Рейтинг:
1

Eek Ten Bears

Не совсем уверен, о чем вы спрашиваете, но я думаю об одном из двух.

Предположение, что вам не нужны записи из таблицы 1, Если в таблице 2 и Таблице 1 нет совпадающей записи.UserID <> @UserID

Очень легкий ход второй части пункта вниз в предложении where, нулевая Таблица2.Пустые строки UserID вызовут неудачные тесты, но потому, что вы используете или это на самом деле то, что вы хотите.

Теперь предположим, что вы хотите узнать массу вещей о пользователях Table1, а затем также записать пользователей Table2, которые не входят в Table1.

Это немного сложнее, но не намного. Вы можете использовать перекрестное соединение, но вам нужно будет переместить предложение ON В предложение WHERE и обрабатывать нули в вашем тесте на отделе, поэтому я бы использовал полное внешнее соединение - см. ниже.

Выберите DI.*, C.* Из таблицы 1 DI полное соединение таблицы 2 C на dI.[Ключ]=C.[Ключ]
И (Di.[Status] <16 или Di.[Status] =36 или DI.[Status] =40)
И DI.Department = @Department AND (DI.UserID=@userID или C.UserID=@UserID)