2011-04-16 94 views
1

我有這個疑問:查詢不產生正確的記錄

SELECT id, name FROM users 
WHERE ((id = 1) OR (5 <= 5)) 

這將導致所有記錄爲5 = 5,但事實並非如此。這只是導致記錄的id = 1。

我在做什麼錯?

編輯: 這是一個完整的查詢:

SELECT project_id, project_name, project_description, project_active, 
      users.user_firstname, users.user_lastname FROM projects 
      INNER JOIN users ON projects.user_id = users.user_id 
      WHERE (projects.user_id = 1 || 3 <= 3) 

編輯: 發現它=/ 東西是不對的加盟;由於某種原因,user_id不再存在。

+1

會發生什麼如果刪除所有的括號? – 2011-04-16 12:53:21

+0

該查詢沒有問題,如果我設置了自己的數據庫並使用它,我會看到'用戶'中的所有行。你的桌子是什麼樣的?你期望看到哪些行,但沒有? – VoteyDisciple 2011-04-16 12:57:14

+1

然後,你的mysql安裝有一個嚴重的問題。剛剛在這裏進行測試,並按預期載入所有結果。 – Andre 2011-04-16 12:59:58

回答

0

嘗試:

EXPLAIN EXTENDED SELECT id, name FROM users where id=1 or 5<=5; 

SHOW WARNINGS; 

你也會發現MySQL的執行查詢的是:

SELECT id,name FROM users where 1 

只是意味着(ID = 1或5 < = 5)同1

0

那麼你想要所有記錄小於或等於5嗎?

如果是其唯一的

SELECT id, name FROM users 
WHERE id <= 5 

那旁邊

(5 <= 5) 

爲 「5」 的錶行一樣的ID?

+0

更仔細地閱讀該查詢。原文有'(5 <= 5)',這是一種重言式。問題是:爲什麼,如果這是一種重言式,是不是所有的行都被返回? – VoteyDisciple 2011-04-16 12:58:03

+0

@VoteyDiscipleI以前從來沒有見過這種情況,可能是別人是的,但值的不值,它是MySQL或其ISO SQL的獨特功能。 – SIFE 2011-04-16 13:06:39

+1

這是ANSI標準。你可以比較你想要的任何東西,包括兩個值。(除了在生成的SQL語句中,它通常不是很有用,但DBMS並不關心你如何得到值,只要它有東西可以比較。) – VoteyDisciple 2011-04-16 13:31:03

0

做這個

$q = ("SELECT id, name FROM users WHERE id = 1 || 5 <= 5"); 

這是我要做的事。