SQL查询中的筛选器不会返回结果

时间:2018-03-16 10:02:56

标签: mysql sql

使用以下代码,我试图过滤事件日期(= .evSpeeldatum)和折扣类型(= .tiPrijstype)的数据。

SELECT 
*
FROM
tickets
    JOIN
evenementen ON tickets.fk_tiEvenementID = evenementen.idEvenement
WHERE
evenementen.evSpeeldatum >= '2018-01-24'
    AND tickets.tiPrijstype = 2
    OR 3
    OR 4
    OR 5
    OR 6
    OR 66
    OR 67;

但是,当我运行此代码时,结果不会在事件发生之日过滤,也不会过滤折扣类型(2 OR 3 OR 4 OR 5 OR 6 OR 66 OR 67)

4 个答案:

答案 0 :(得分:3)

使用IN之类的

SELECT 
*
FROM
tickets
    JOIN
evenementen ON tickets.fk_tiEvenementID = evenementen.idEvenement
WHERE
evenementen.evSpeeldatum >= '2018-01-24'
AND tickets.tiPrijstype IN(2,3,4,5,6,66,67);

答案 1 :(得分:0)

以下是有效查询的示例:

SELECT * 
  FROM tickets t
  JOIN evenementen e
    ON e.idEvenement = t.fk_tiEvenementID 
 WHERE e.evSpeeldatum >= '2018-01-24'
   AND (t.tiPrijstype = 2 OR t.tiPrijstype = 3);

......也可以改写为......

SELECT * 
  FROM tickets t
  JOIN evenementen e
    ON e.idEvenement = t.fk_tiEvenementID 
 WHERE e.evSpeeldatum >= '2018-01-24'
   AND t.tiPrijstype IN(2,3);

答案 2 :(得分:0)

如果您有针对此过滤器的记录,并且如果仅以此格式保存日期,则以下查询将起作用,

 SELECT * FROM tickets JOIN evenementen ON tickets.fk_tiEvenementID = evenementen.idEvenement WHERE
 evenementen.evSpeeldatum >= '2018-01-24'
 AND tickets.tiPrijstype IN (2,3,4,5,6,66,67);

答案 3 :(得分:0)

WHERE子句应该查看布尔表达式(主要是比较)。这些可以与ANDOR结合使用。对于istance:

WHERE tickets.tiPrijstype = 2 OR tickets.tiPrijstype = 3

但是你有OR 3。 MySQL期望一些布尔表达式,因此它推测3代表一个布尔值,并将3静默转换为true(它将0转换为false,将所有其他值转换为true)。所以你的

WHERE tickets.tiPrijstype = 2 OR 3

转换为

WHERE tickets.tiPrijstype = 2 OR true

对于每条记录都是如此。

混合ANDOR时,请注意运算符优先级。 AND优先于OR。所以

WHERE evenementen.evSpeeldatum >= '2018-01-24'
  AND tickets.tiPrijstype = 2
   OR tickets.tiPrijstype = 3

装置

WHERE (evenementen.evSpeeldatum >= '2018-01-24' AND tickets.tiPrijstype = 2)
   OR tickets.tiPrijstype = 3

这又不是你想要的。使用括号直截了当:

WHERE evenementen.evSpeeldatum >= '2018-01-24'
  AND (tickets.tiPrijstype = 2 OR tickets.tiPrijstype = 3)

如上所示,在检查列表中的值时,无论如何都要使用IN,因此不会出现上述问题:

WHERE evenementen.evSpeeldatum >= '2018-01-24'
  AND tickets.tiPrijstype IN (2,3)

整个查询:

SELECT *
FROM tickets t
JOIN evenementen e ON t.fk_tiEvenementID = e.idEvenement
WHERE e.evSpeeldatum >= date '2018-01-24'
  AND t.tiPrijstype IN (2,3,4,5,6,66,67);