Denodo / SQL-WHERE子句中AND和OR的多个条件

时间:2019-05-14 03:03:49

标签: mysql sql-server denodo

我正在Denodo的2个表上过滤票证,该表记录了对票证进行的所有操作的历史记录。我想要的是看到“关键字”列为Null,而列模板不是“ temp〜”。我能够完美地达到第一个条件,但第二个则不能。那么该列中的任何行都不再返回'temp〜',但是由于它是历史表,因此它确实会返回已在工单上执行的其他操作,例如保存,完成,完成,因此它仍会返回我要过滤的票证号码。

SELECT  A.ticket_number, A.created_on, A.keywords, B.Action
FROM table1 AS A LEFT JOIN
(SELECT MAX(action) as Action, ticket_number
FROM table2 GROUP BY ticket_number) AS B on A.ticket_number= B.ticket_number 
WHERE created_on>= '2019-04-15' AND(NOT B.Action= 'Templates~' AND A.keywords IS NULL)
Actual table:
ticket_number | created_on | keywords | Action
ticket1       | 2019-04-15 | dog      | Template1
ticket1       | 2019-04-15 | dog      | Save
ticket2       | 2019-04-17 | NULL     | no_temp
ticket3       | 2019-04-20 | NULL     | no_temp
ticket2       | 2019-04-17 | NULL     | no_temp

Current results:
ticket_number | created_on | keywords | Action
ticket1       | 2019-04-15 | NULL     | Save
ticket2       | 2019-04-17 | NULL     | working
ticket3       | 2019-04-20 | NULL     | Save
ticket2       | 2019-04-17 | NULL     | complete


Expected results:
ticket_number | created_on | keywords | Action
ticket2       | 2019-04-17 | NULL     | no_temp
ticket3       | 2019-04-20 | NULL     | no_temp

1 个答案:

答案 0 :(得分:0)

查看提供的信息,结果似乎是正确的。

查询的WHERE条件为:

WHERE created_on>= '2019-04-15' AND(NOT B.templates = 'Templates~' AND A.keywords IS NULL)

当前结果的所有行均满足此条件。那是

  • created_on等于或大于2019-04-15
  • 子查询templates的{​​{1}}的值不是 B
  • null的值为keywords