MySQL如何构建Where子句

时间:2012-10-08 10:13:39

标签: mysql sql database

我有一个包含四个字段的表格 - table_idtable_whotable_whomtable_when

-------------------------------------------------------
table_id | table_who | table_whom | table_when
-------------------------------------------------------    
1        | aaa       |   w1       | 02/10/2012 19:05:03

2        | aaa       |   w2       | 08/10/2012 08:05:03

3        | bbb       |   w3       | 08/10/2012 08:03:05

4        | bbb       |   w4       | 07/10/2012 08:05:03

我想选择所有行:

  • table_who=”aaa”(Now()-table_when)>12
  • table_who<>”aaa”

如果我使用:

    SELECT Table.table_id, Table.table_who, Table.table_whom, Table.table_when, Format(Now()-[table_when],"hh") AS Diff
    FROM [Table]
    WHERE (((Table.table_who)<>"aaa") AND ((Format(Now()-[table_when],"hh"))<12));

我只有两行table_id=34。但我想要的是拥有table_ID=134

5 个答案:

答案 0 :(得分:0)

where (Table.table_who<>"aaa") OR (Format(Now()-[table_when],"hh")<12 AND Table.table_who="aaa") 

如果我理解正确的话。它不是aaa或它现在是aaa - 当&gt; 12?

答案 1 :(得分:0)

请尝试:

   SELECT Table.table_id, Table.table_who, Table.table_whom, Table.table_when, Format(Now()-  [table_when],"hh") AS Diff
    FROM [Table]
    WHERE (((Table.table_who)<>"aaa") AND ((Format(Now()-[table_when],"hh"))<12))
    OR (((Table.table_who)="aaa") AND ((Format(Now()-[table_when],"hh"))<12))

答案 2 :(得分:0)

试试这段代码:

SELECT Table.table_id, Table.table_who, Table.table_whom, Table.table_when, Format(Now()-[table_when],"hh") AS Diff
    FROM [Table]
    WHERE (Table.table_who)<>"aaa") 
    OR ((Table.table_who)="aaa") AND ((Format(Now()-[table_when],"hh"))<12) ); 

答案 3 :(得分:0)

只需写下您定义的条件:

WHERE
 (Table.table_who = 'aaa' AND Format(Now() - [table_when], 'hh') < 12) OR
 Table.table_who <> 'aaa'

在某些情况下你只需要括号,当然不应该过度使用它们,但我喜欢在这样的情况下将条件组合在一起,如果你想要(A和B)或C.如果你这样写,可以对表达式的评估顺序毫无疑问。

根据您习惯的不同,不同的缩进可能会更加清晰。

WHERE
 (
    Table.table_who = 'aaa' 
    AND Format(Now() - [table_when], 'hh') < 12
 ) 
 OR Table.table_who <> 'aaa'

答案 4 :(得分:0)

我认为这就是你想要的:

WHERE (Table.table_who = "aaa" AND Table.table_when > SUBDATE(CURDATE(), INTERVAL 12 DAY)) OR Table.table_who <> "aaa"