반응형
구가 예상대로 작동하지 않는 경우:하나의 ID만 지정되면 두 개의 다른 ID에서 데이터를 가져옵니다.
다음 스크립트가 있습니다.
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
데이터만 받고 싶은데Cliente
000000000 입니다.왜 그런 것일까요?뭐가 잘못됐나요?
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;
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
언급URL : https://stackoverflow.com/questions/56605455/where-clause-not-working-as-expected-i-get-data-from-2-different-ids-when-only
반응형
'programing' 카테고리의 다른 글
mapstate의 데이터가 로드를 마칠 때까지 기다립니다. (0) | 2023.01.29 |
---|---|
Larabel 5.1 - 데이터베이스 연결 확인 (0) | 2023.01.19 |
그룹별 값 목록에서 n번째 값을 쿼리하려면 어떻게 해야 합니까?MySQL (0) | 2023.01.19 |
mysql, percona, maria 중 어느 것을 결정하다DB (0) | 2023.01.19 |
LEFT JOIN을 사용하여 MySQL의 여러 테이블 업데이트 (0) | 2023.01.19 |