我有这个脚本:
CREATE TABLE `Usuario` (
`IDUsuario` INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`IDUsuario`)
);
CREATE TABLE `Cliente` (
`Cedula` VARCHAR(9) NOT NULL,
`FK_Usuario` INT NOT NULL,
PRIMARY KEY (`Cedula`, `FK_Usuario`)
);
CREATE TABLE `NotaCreditoDebito` (
`IDNota` BIGINT NOT NULL AUTO_INCREMENT,
`FK_Cliente` VARCHAR(9) NOT NULL,
`FK_Usuario` INT NOT NULL,
`NoNota` CHAR(2) NOT NULL,
`Tipo` CHAR(2) NOT NULL,
PRIMARY KEY (`IDNota`, `FK_Cliente`, `FK_Usuario`)
);
ALTER TABLE `Cliente` ADD FOREIGN KEY (`FK_Usuario`) REFERENCES `Usuario`(`IDUsuario`);
ALTER TABLE `NotaCreditoDebito` ADD FOREIGN KEY (`FK_Usuario`) REFERENCES `Usuario`(`IDUsuario`);
ALTER TABLE `NotaCreditoDebito` ADD FOREIGN KEY (`FK_Cliente`) REFERENCES `Cliente`(`Cedula`);
INSERT INTO Usuario VALUES();
/*Usuario 1 has 2 Clientes*/
INSERT INTO Cliente VALUES('000000000',1);
INSERT INTO Cliente VALUES('123456789',1);
/*Cliente 000000000 has 2 NotaCreditoDebito */
INSERT INTO NotaCreditoDebito VALUES(0,'000000000',1,'N1','01');
INSERT INTO NotaCreditoDebito VALUES(0,'000000000',1,'N2','02');
/*Cliente 123456789 has 1 NotaCreditoDebito */
INSERT INTO NotaCreditoDebito VALUES(0,'123456789',1,'N3','01');
当我执行以下查询时,即使我只想获取Cliente
000000000 的数据,我也会获取两者的数据 Cliente
。这是为什么?怎么了?
SELECT
NCD.IDNota,
NCD.FK_Cliente,
NCD.FK_Usuario,
NCD.NoNota,
NCD.Tipo
FROM NotaCreditoDebito NCD INNER JOIN Usuario U ON NCD.FK_Usuario=U.IDUsuario
INNER JOIN Cliente C ON NCD.FK_Cliente=C.Cedula
WHERE NCD.Tipo='01' OR NCD.Tipo='02' AND NCD.FK_Cliente='000000000' AND NCD.FK_Usuario=1;
答案 0 :(得分:4)
OR
的优先级低于AND
。几乎您所在的地方
WHERE NCD.Tipo='01' OR (NCD.Tipo='02' AND NCD.FK_Cliente='000000000' AND NCD.FK_Usuario=1)
要解决此问题,请在OR
上加上括号:
WHERE (NCD.Tipo='01' OR NCD.Tipo='02') AND NCD.FK_Cliente='000000000' AND NCD.FK_Usuario=1