与Bool的MySQL查询问题

时间:2010-02-13 13:13:20

标签: mysql

我遇到以下MySQL查询的问题:

SELECT * FROM TPDSessions  WHERE  TPDS_Morning = 0 AND TPDD_Id = 1 AND TPDS_Chair1_idPerson = 16785 OR TPDS_Chair2_idPerson = 16785

返回的行有TPDS_Morning,值为1,我不明白为什么。这是表结构:

CREATE TABLE `TPDSessions` (
  `TPDS_Id` int(11) NOT NULL auto_increment,
 `TPDR_Id` int(32) NOT NULL,
 `TPDD_Id` int(32) NOT NULL,
 `TPDS_Morning` tinyint(1) NOT NULL,
 `TPDS_Name` varchar(200) NOT NULL,
 `TPDS_Chair1_idPerson` int(11) NOT NULL,
`TPDS_Chair2_idPerson` int(11) NOT NULL,   
 PRIMARY KEY  (`TPDS_Id`), 
KEY `chair1_idPerson` (`TPDS_Chair1_idPerson`,`TPDS_Chair2_idPerson`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=9 ;

如果有人可以解释如何调整我的查询以不返回该结果......

2 个答案:

答案 0 :(得分:2)

您可能会遗漏OR语句的一些括号。

可能是

SELECT  * 
FROM    TPDSessions  
WHERE   (TPDS_Morning = 0 
AND     TPDD_Id = 1 
AND     TPDS_Chair1_idPerson = 16785) 
OR      TPDS_Chair2_idPerson = 16785

SELECT  * 
FROM    TPDSessions  
WHERE   TPDS_Morning = 0 
AND     TPDD_Id = 1 
AND     (TPDS_Chair1_idPerson = 16785 
OR      TPDS_Chair2_idPerson = 16785)

我认为第二种可能性更大。

答案 1 :(得分:1)

因为你最后有一个OR。可能有一行与Chair2_idPerson = 16875和 TDPS_Morning = 1.在适当的位置放置括号以对语句进行分组。