2012-07-18 34 views
0

我不是一個sql guru,但爲什麼這個查詢返回錯誤?MySQL中的子查詢WHERE子句使用

SELECT username FROM history as h 
    WHERE username IS NOT NULL AND updated>1342555201 AND updated<1342641599 
    AND WHERE (SELECT status FROM managers WHERE username=h.username) > 0 

如何在一個查詢中使用包含狀態的第二個表上的子查詢將狀態> 0的用戶名分組?

回答

2

嘗試

SELECT h.username FROM history h 
INNER JOIN status s USING(username) 
WHERE h.updated BETWEEN 1342555201 AND 1342641599 
GROUP BY h.username 
HAVING s.status > 0 

注:

  • INNER JOIN永遠retrive NOT NULL和用戶名的共同價值
  • 我假定這兩個表具有相同的列名 .if bot^h的表有不同的列名,然後更改

    USING(username)ON h.column_name = s.column_name

2

你不應該有2 WHERE語句

編輯:

也 - 你應該加入的經理表

+0

哎呀。我很無禮。謝謝 – moogeek 2012-07-18 11:44:57

+0

SELECT username FROM history as h INNER JOIN managers m USING(username) WHERE AND m.status> 0 AND h.updated BETWEEN 1342555201 AND 1342641599 – Randy 2012-07-18 11:47:38

+0

我無法加入,因爲在真正的db中,我將有兩列用不同的名字('username'和'manager') – moogeek 2012-07-18 11:48:09

1

你有一個where太多。

SELECT username FROM history as h 
WHERE username IS NOT NULL AND updated>1342555201 AND updated<1342641599 
AND WHERE (SELECT status FROM managers WHERE username=h.username) > 0 
    ^^^^^