使用以下代码,我试图过滤事件日期(= .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)
答案 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
子句应该查看布尔表达式(主要是比较)。这些可以与AND
和OR
结合使用。对于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
对于每条记录都是如此。
混合AND
和OR
时,请注意运算符优先级。 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);