我有这两个表:这可以用更好的方式书写吗?
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