ОСТАВЛЕННОЕ СОЕДИНЕНИЕ никакой retorna ПУСТОЙ УКАЗАТЕЛЬ доблести

Таблицы DOS Tengo:

AppWindowsEvent:

CREATE TABLE [AppWindowsEvent]
(
[idAppWindowEvent]      INT IDENTITY(1,1)
, [idAppWindow]         INT
, [idMill]              INT
, [idEventType]         INT
, [Order]               INT
, CONSTRAINT PK_idAppWindowEvent PRIMARY KEY ([idAppWindowEvent])
, CONSTRAINT FK_idAppWindowEvent_AppWindow FOREIGN KEY ([idAppWindow]) REFERENCES [AppWindow]([idAppWindow])
, CONSTRAINT FK_idAppWindowEvent_EventType FOREIGN KEY ([idEventType]) REFERENCES [EventType]([idEventType])
)

Событие:

CREATE TABLE [Event]       
(
[idEvent] [INT] IDENTITY(1,1) NOT NULL
, [idEventType] [INT] NOT NULL
, [idEntity] [INT] NOT NULL
, CONSTRAINT PK_IdEvent PRIMARY KEY([idEvent])
, CONSTRAINT [FK_Event_EventType] FOREIGN KEY([idEventType]) REFERENCES [EventType] ([idEventType])
)

EL PROBLEMA: танго En la tabla conjuntos de Eventos para ciertos filtros (idAppWindow y idMill), параграф cada combinación, el установил de datos puede variar, y en Event, танго N cantidad de registros de Eventos (de los cuales algunos pueden Эстар Комо никакой en la tabla AppWindowEvent), идентификационные данные en la tabla Event se identifica por.

Entonces, параграф СИ ООН idAppWindow y ООН idMill, сабля quiero танго que Eventos подставляет доблесть (доблесть y los que no tienen) en la tabla Event, довод "против" esto se resolvería de manera fácil ООН LEFT JOIN, pero никакой consigo el resultado que deseo.

En el primer caso es СИ Комо hiciera ООН INNER JOIN, никакая devuelve доблесть НЕ АННУЛИРУЕТ, y en el segundo caso (cuando al ON del JOIN le agrego un filtro de idEntity перфекто funciona, devuelve la cantidad de Eventos que estan configurados para un idMill y idAppWindow, y Лос доблесть correspondidos en Event, los que no, es porque сын registros nulos).

Cuando ejecuto este запрос:

SELECT
*
FROM
AppWindowsEvent AWE
LEFT JOIN Event E ON AWE.idEventType = E.idEventType
WHERE
AWE.idMill = 1
AND AWE.idAppWindow = 1
ORDER BY
AWE.[Order] ASC

El resultado никакая devuelve доблесть nulos.

Pero cuando ejecuto este otro запрос:

SELECT
*
FROM
AppWindowsEvent AWE
LEFT JOIN Event E ON AWE.idEventType = E.idEventType
AND E.[idEntity] = 1234
WHERE
AWE.idMill = 1
AND AWE.idAppWindow = 1
ORDER BY
AWE.[Order] ASC

El resultado devuelve registros nulos.

NOTA: СИ bien запрос Эль-Сегундо Аньда, lo hace параграф ООН idEntity específico, en ми caso necesito todos Лос idEntity.

3
задан 13.10.2016, 19:52
3 ответа

Решение мне вначале кажется правильным. Так как ввождения раньше в WHERE одна condiciГіn с полем таблицы Event в месте LEFT pasarГ - в INNER, который не случай. ВїPodrГ-схвати пытаться снимать чужие ключи обоих подмостков, видеть, как он ведет себя, и ты комментируешь нам?

0
ответ дан 24.11.2019, 13:16
  • 1
    Podrí схвати включать có я говорю, что я объяснил твой ответ. – Davlio 19.02.2017, 02:53
  • 2
    @Davlio Ilú strame и я помещаю тебе пример, который ты хочешь. Не qué có я говорю, что ты хотел, чтобы он поместил вопроса – anpadia 20.02.2017, 09:19

первая консультация, которую ты написал, - правильна и выполняет то, в чем ты нуждаешься, то, что плохое, так это вторая консультация, которую ты делаешь, чтобы подтверждать результаты.

LEFT JOIN главным образом показывает все реестры таблицы левой стороны и Ваши совпадения с подмостками правой стороны, а именно, которую он достаточна, с которым был реестр, который совпадал бы уже, он не покажет тебя недействительные, я использую следующий пример, чтобы это объяснять лучше в твоем случае. introducir la descripción de la imagen aquí

В подмостках [AppWindowsEvent] и [Event] у меня есть 2 реестра в каждой, как оба реестра совпадают в поле idEventType, результат - 2 реестра без недействительных используя консультацию, которую ты напечатал.

Потом, выдав реестры таблицы [Event] из-за поля [idEntity], у нас остается только 1 реестр, следовательно реализовав консультацию проверки, что ты напечатал механизм, не находит совпадение для реестра таблицы [AppWindowsEvent] и показывает тебе поля как недействительные.

0
ответ дан 24.11.2019, 13:16

join только он будет искать тебе точные совпадения в этом случае из-за того, что будет left в таблице, Awe, если ты хочешь возвратить все, хотя он будет иметь недействительные, ты должен использовать один union

0
ответ дан 24.11.2019, 13:16
  • 1
    #191; Podr и # 237; схвати определять c и # 243; mo это отвечать и # 237; в в вопрос? Быть и # 237; в рекомендуемый, который ты включил c и # 243; я говорю, что он отвечает на вопрос автора. – Mariano 30.09.2016, 07:47
  • 2
    Мне кажется, что твой ответ - согласно функционированию INNER JOIN и вопрос пользователя пунктуальный относительно использования LEFT JOIN – Phi 13.10.2016, 19:33