2010-02-13 70 views
0

我有以下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 ; 

如果任何人都可以解釋如何調整我的查詢不返回結果...

+0

魔術字是'優先'。 http://dev.mysql.com/doc/refman/5.0/en/operator-precedence.html – bobince 2010-02-13 13:18:56

回答

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

是的,考慮到第二個問題很可能 – 2010-02-13 13:16:38

+0

argh ..就是這樣。感謝您清理這個問題,之前有過這個問題,但是這次顯然沒有足夠的時間注意到它。謝謝! – Maarten 2010-02-13 13:18:35

1

因爲你在最後有一個OR。可能有一行與Chair2_idPerson = 16875和 TDPS_Morning = 1.在適當位置括號括起來的語句。