MySQL - 和/或逻辑 - 出了什么问题?

时间:2015-07-07 14:03:38

标签: mysql

我无法弄清楚这个查询有什么问题。我希望特定卖家的所有产品ID都不再有效。要有效,"产品必须是活跃的=' Y' AND expireDate> = NOW()AND statusid = 20(其他几个无效)。

这是查询

    SELECT DISTINCT(productID) FROM products
    WHERE sellerID IN
    (/*list of sellerIDs*/) 
    AND (active != 'Y' OR statusid != 20 OR expireDate < NOW())

一些示例数据(全部来自上面子查询中的sellerID)

    productID | active | statusid | expireDate
    1         |   Y    |     20   | 2015-08-01
    2         |   N    |     20   | 2015-08-01
    3         |   Y    |     0    | 2015-08-01
    4         |   Y    |     20   | 2015-07-01

我希望得到2,3和4。

2 个答案:

答案 0 :(得分:0)

所以在问题陈述中它说我们需要在active,statusid和expireDate之间使用AND。请使用以下查询:

SELECT DISTINCT(productID) FROM products
WHERE sellerID IN
(/*list of sellerIDs*/) 
AND active != 'Y' AND statusid != 20 AND expireDate < NOW()

答案 1 :(得分:0)

在这里为我工作。

SELECT DISTINCT(productID) FROM products
WHERE sellerID IN (/*list of sellerIDs*/) 
AND active != 'Y' OR statusid != 20 OR DATE(expireDate) < NOW();

OR

SELECT DISTINCT(productID) FROM products
WHERE sellerID IN (/*list of sellerIDs*/) 
AND active != 'Y' AND statusid != 20 OR DATE(expireDate) < DATE(NOW());

OR

SELECT DISTINCT(productID) FROM products
WHERE sellerID IN (/*list of sellerIDs*/) 
AND active != 'Y' OR (statusid != 20 OR DATE(expireDate) < CURDATE());