У меня есть две таблицы:
CREATE TABLE x
(
id INT NOT NULL,
exclude BIT NOT NULL,
PRIMARY KEY (id)
);
CREATE TABLE y
(
id INT NOT NULL,
field1 INT NOT NULL,
field2 INT NOT NULL,
field3 INT NOT NULL,
field4 INT NOT NULL,
field5 INT NOT NULL,
PRIMARY KEY (id)
);
И это sproc:
CREATE PROCEDURE proc1
(
i1 INT,
i2 INT,
i3 INT,
i4 INT,
i5 INT
)
BEGIN
SELECT
id
FROM
y
WHERE
field1 = i1,
field2 = i2,
field3 = i3,
field4 = i4,
field5 = i5
AND id NOT IN (
SELECT
y.id
FROM
y, x
WHERE
y.field1 = i1
AND y.field2 = i2,
AND y.field3 = i3,
AND y.field4 = i4,
AND y.field5 = i5
AND x.id = y.id
AND x.exclude = 1);
END IF;
Я в основном хочу получить поле id от y, кроме тех, которые существуют в x с exclude = 1, это можно сделать с помощью объединений или написать лучше?
Большое спасибо
Примечание: причина, по которой соединение используется в подзапросе NOT IN, для повышения производительности, таблица x содержит много записей, в то время как оператор select в таблице y возвращает только пару записей
Редактировать: Также обратите внимание, что идентификатор в y может существовать или не существовать в x (в противном случае подойдет простое объединение), я хочу получить все идентификаторы в y, кроме тех, которые существуют в x с exclude = 1