MySQL中的子查询WHERE子句使用

问题描述:

我不是一个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的用户名分组?

尝试

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 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

你有一个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 
    ^^^^^