SQL:交差する構文エラー?
Sql Syntax Error With Intersect
解決:
使用しているように見えるMySQLは、INTERSECT構文。別の方法で解決する必要があります。
この場合、それは些細なことです-一部の部品の「緑」と「赤」を提供するすべてのサプライヤーのリストが必要なだけです-クエリは部品自体が関連しているかどうかをわざわざ確認しないので、非常に簡単に解決できますこのような:
SELECT Supplier.sid FROM Supplier JOIN Catalog ON Catalog.sid = Supplier.sid JOIN Parts ON Parts.pid = Catalog.pid WHERE Parts.color IN( 'red'、 'green')GROUP BY Supplier.sid HAVING COUNT(DISTINCT Parts .color)= 2個人的には、元のクエリが典型的なものだとは思いませんINTERSECTの問題。を見てくださいVinko Vrsalovicが提供するJOINソリューションは、INTERSECT(RDBMSが実際に提供する場合でも、私はこれを好みますネイティブに交差します)。
何もありません。MySQLにはINTERSECTキーワードがありません。これを内部結合として書き直すことができます。
SELECT DISTINCT sid FROM(SELECT Supplier.sid FROM Supplier JOIN Catalog ON Catalog.sid = Supplier.sid JOIN Parts ON Parts.pid = Catalog.pid WHERE Parts.color = 'red')INNER JOIN(SELECT Supplier.sid FROM Supplier JOIN Catalog ON Catalog.sid = Supplier.sid JOIN Parts ON Parts.pid = Catalog.pid WHERE Parts.color = 'green')b ON(a.sid = b.sid);このクエリは確かにより適切に記述できますが、これは、交差が選択された個別の内部結合にすぎないことを示すためのものであり、一方を他方に自動的に変換できます。
これはあなたが望むことをするはずです:
SELECT Supplier.sid FROM Supplier JOIN Catalog ON Catalog.sid = Supplier.sid INNER JOIN Parts AS parts1 ON parts1.pid = Catalog.pid AND parts1.color = 'red' INNER JOIN Parts AS parts2 ON parts2.pid = Catalog.pid AND parts2.color = '緑'