Таблицы 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
.
Решение мне вначале кажется правильным. Так как ввождения раньше в WHERE одна condiciГіn с полем таблицы Event в месте LEFT pasarГ - в INNER, который не случай. ВїPodrГ-схвати пытаться снимать чужие ключи обоих подмостков, видеть, как он ведет себя, и ты комментируешь нам?
первая консультация, которую ты написал, - правильна и выполняет то, в чем ты нуждаешься, то, что плохое, так это вторая консультация, которую ты делаешь, чтобы подтверждать результаты.
LEFT JOIN главным образом показывает все реестры таблицы левой стороны и Ваши совпадения с подмостками правой стороны, а именно, которую он достаточна, с которым был реестр, который совпадал бы уже, он не покажет тебя недействительные, я использую следующий пример, чтобы это объяснять лучше в твоем случае.
В подмостках [AppWindowsEvent] и [Event] у меня есть 2 реестра в каждой, как оба реестра совпадают в поле idEventType, результат - 2 реестра без недействительных используя консультацию, которую ты напечатал.
Потом, выдав реестры таблицы [Event] из-за поля [idEntity], у нас остается только 1 реестр, следовательно реализовав консультацию проверки, что ты напечатал механизм, не находит совпадение для реестра таблицы [AppWindowsEvent] и показывает тебе поля как недействительные.
join
только он будет искать тебе точные совпадения в этом случае из-за того, что будет left
в таблице, Awe
, если ты хочешь возвратить все, хотя он будет иметь недействительные, ты должен использовать один union