我有這兩個表:這可以用更好的方式書寫嗎?
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)
);
而這個存儲過程:
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;
我基本上是想從y中得到id字段除了那些存在於X與排除= 1,這會是用連接完成還是用更好的方式編寫?
非常感謝
注:原因加入了「NOT IN」查詢是爲了性能考慮,表x包含了很多紀錄被使用,而在數據表Y select語句返回一對夫婦只記錄
編輯:也請注意,y中的ID可能會或可能不會在X存在(否則一個簡單的加入會做),我想在y中所有的ID,除了那些存在於X與排除= 1
謝謝你,我知道這是寫得不好,這是爲什麼問這個問題,原諒我可憐的SQL技能... – 2009-04-26 01:17:27