這個查詢看起來運行良好:SQL:選擇不在子查詢中的表中的所有內容?
-- Every supplier that produces some red or green part
SELECT Suppliers.sid
FROM Suppliers, Catalog, Parts
WHERE Suppliers.sid = Catalog.sid
AND Catalog.pid = Parts.pid
AND (Parts.color = "red" OR Parts.color = "green");
要檢查它,我想看看這不會受到此查詢返回的每一個SID,以確保它們不產生綠色或紅色部分。我怎樣才能做到這一點?
這似乎並不奏效:
SELECT Parts.color
FROM Suppliers, Catalog, Parts
WHERE Suppliers.sid NOT IN (
SELECT Suppliers.sid, Parts.color
FROM Suppliers, Catalog, Parts
WHERE Suppliers.sid = Catalog.sid
AND Catalog.pid = Parts.pid
AND (Parts.color = "red" OR Parts.color = "green")
);
MySQL的錯誤:
Error 1241 (21000): Operand should contain 1 column(s)
什麼是去了解這個正確的方式?
這是用於創建我的工作表上的SQL:
SET @[email protected]@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @[email protected]@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @[email protected]@SQL_MODE, SQL_MODE='TRADITIONAL';
CREATE SCHEMA IF NOT EXISTS `mydb` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci ;
USE `mydb`;
-- -----------------------------------------------------
-- Table `mydb`.`Suppliers`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`Suppliers` (
`sid` INT NOT NULL ,
`sname` VARCHAR(45) NULL ,
`address` VARCHAR(45) NULL ,
PRIMARY KEY (`sid`))
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `mydb`.`Parts`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`Parts` (
`pid` INT NOT NULL ,
`pname` VARCHAR(45) NULL ,
`color` VARCHAR(45) NULL ,
PRIMARY KEY (`pid`))
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `mydb`.`Catalog`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`Catalog` (
`cost` INT NULL ,
`pid` INT NOT NULL ,
`sid` INT NOT NULL ,
PRIMARY KEY (`pid`, `sid`) ,
INDEX `fk_Catalog_Parts1` (`pid` ASC) ,
INDEX `fk_Catalog_Suppliers1` (`sid` ASC) ,
CONSTRAINT `fk_Catalog_Parts1`
FOREIGN KEY (`pid`)
REFERENCES `mydb`.`Parts` (`pid`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_Catalog_Suppliers1`
FOREIGN KEY (`sid`)
REFERENCES `mydb`.`Suppliers` (`sid`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
SET [email protected]_SQL_MODE;
SET [email protected]_FOREIGN_KEY_CHECKS;
SET [email protected]_UNIQUE_CHECKS;
+ 1爲捕捉更多的錯誤:) – 2010-02-18 22:53:28
+1爲隱式聯接評論 – 2010-02-18 22:54:03