下面是一个MySQL查询我运行:保持SQL干
-- get the sid of every supplier who does not supply both a red and green part
SELECT Suppliers.sid, Parts.color
FROM Suppliers
JOIN Catalog ON Catalog.sid = Suppliers.sid
JOIN Parts ON Parts.pid = Catalog.pid
WHERE Suppliers.sid NOT IN (
SELECT Suppliers.sid
FROM Suppliers
JOIN Catalog ON Catalog.sid = Suppliers.sid
JOIN Parts ON Parts.pid = Catalog.pid
WHERE Parts.color IN ('red', 'green')
GROUP BY Suppliers.sid
HAVING COUNT(DISTINCT Parts.color) = 2
)
ORDER BY Suppliers.sid DESC;
正如你所看到的,这是重复两次:
FROM Suppliers
JOIN Catalog ON Catalog.sid = Suppliers.sid
JOIN Parts ON Parts.pid = Catalog.pid
我能做些什么,只申报这个曾经,并参考两次?或者,这是否表明我的整个查询存在缺陷?
当我用这三条相同的线运行15个不同的查询时,问题会加剧。
的视图解决了重复SQL的问题,如上所述由scwagner。它还为物理表存储和数据的逻辑外观提供了一种有用的抽象级别。 – 2010-02-21 04:14:54
但是要小心,如果你使用太多的视图,视图可能会咬你,尤其是当视图返回的列多于你在特定情况下需要的列或者正在进行大量不必要的连接时。如果你是在直接表演中,你只需要干掉 – CResults 2010-02-21 14:10:05