gpt4 book ai didi

mysql - SQL 查询 WHERE CLAUSE 未按预期工作

转载 作者:行者123 更新时间:2023-11-29 11:50:51 25 4
gpt4 key购买 nike

我正在使用此查询从我的数据库中获取一些价格记录。如果您查看记录,您会根据查询在结果集中发现 1 个意外行(第 4 行)。我是否正确运行了查询,还是必须更改它以消除意外行(第 4 行)?

     mysql> SELECT m.shop,
m.price,
m.p3,
m.ds,
m.coupon_active AS cp,
m.online AS ol,
m.affiliate AS af,
m.colors
FROM shop_product_m2m m
LEFT JOIN shop s ON s.id=m.shop
WHERE product = 1971
AND s.is_active = 1
AND m.price IS NOT NULL
AND m.price != ''
AND (
(m.p3=1 AND m.colors IS NOT NULL)
OR
(m.ds =0 AND m.coupon_active=0 AND m.affiliate=0 AND m.online=0)
)
ORDER BY m.p3 DESC,
m.price ASC,
m.modified DESC;

输出:

       +------+---------+----+----+----+----+----+-------------+
| shop | price | p3 | ds | cp | ol | af | colors |
+------+---------+----+----+----+----+----+-------------+
| 317 | 8350.00 | 1 | 0 | 0 | 0 | 0 | black |
| 268 | 8490.00 | 1 | 0 | 0 | 0 | 0 | Black,White |
| 192 | 8490.00 | 1 | 0 | 0 | 0 | 0 | White,Black |
| 38 | 8490.00 | 1 | 0 | 0 | 0 | 0 | NULL |
| 166 | 8110.00 | 0 | 0 | 0 | 0 | 0 | NULL |
| 160 | 8250.00 | 0 | 0 | 0 | 0 | 0 | NULL |
| 184 | 8490.00 | 0 | 0 | 0 | 0 | 0 | NULL |
| 182 | 8490.00 | 0 | 0 | 0 | 0 | 0 | NULL |
| 181 | 8490.00 | 0 | 0 | 0 | 0 | 0 | NULL |
| 112 | 8490.00 | 0 | 0 | 0 | 0 | 0 | NULL |
| 90 | 8490.00 | 0 | 0 | 0 | 0 | 0 | NULL |
| 130 | 8490.00 | 0 | 0 | 0 | 0 | 0 | NULL |
| 68 | 8490.00 | 0 | 0 | 0 | 0 | 0 | NULL |
| 66 | 8490.00 | 0 | 0 | 0 | 0 | 0 | NULL |
| 150 | 8490.00 | 0 | 0 | 0 | 0 | 0 | NULL |
| 91 | 8490.00 | 0 | 0 | 0 | 0 | 0 | NULL |
| 124 | 8490.00 | 0 | 0 | 0 | 0 | 0 | NULL |
| 151 | 8490.00 | 0 | 0 | 0 | 0 | 0 | NULL |
| 159 | 8490.00 | 0 | 0 | 0 | 0 | 0 | NULL |
+------+---------+----+----+----+----+----+-------------+
19 rows in set (0.00 sec)

第四行不是我所期望的!它不应该出现在我的结果集中:

       |   38 | 8490.00 |  1 |  0 |  0 |  0 |  0 | NULL        |

编辑对于那些想查看创建表的人:

     CREATE TABLE `shop_product_m2m` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`created` datetime NOT NULL,
`modified` datetime NOT NULL,
`expires` datetime NOT NULL,
`shop` int(11) NOT NULL,
`product` int(11) NOT NULL,
`price` decimal(13,2) DEFAULT NULL,
`instock` tinyint(1) NOT NULL DEFAULT '1',
`expired` tinyint(1) NOT NULL DEFAULT '0',
`burgainable` tinyint(1) NOT NULL DEFAULT '1',
`coupon_active` tinyint(1) NOT NULL DEFAULT '0',
`referral_url` text,
`p3` tinyint(1) NOT NULL DEFAULT '0',
`warrantytype` varchar(10) NOT NULL DEFAULT 'None',
`warranty` text,
`colors` varchar(128) DEFAULT NULL,
`ds` tinyint(1) NOT NULL DEFAULT '0',
`affiliate` tinyint(1) NOT NULL DEFAULT '0',
`online` tinyint(1) NOT NULL DEFAULT '0',
`http_status` varchar(3) DEFAULT NULL,
`color_varies` tinyint(1) NOT NULL DEFAULT '0',
`price_variance_count` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `shop_2` (`shop`,`product`),
KEY `shop` (`shop`),
KEY `product` (`product`),
CONSTRAINT `shop_product_m2m_ibfk_1` FOREIGN KEY (`shop`)
REFERENCES `shop` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `shop_product_m2m_ibfk_2` FOREIGN KEY (`product`)
REFERENCES `product` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=77002 DEFAULT CHARSET=utf8

最佳答案

(m.p3=1 AND m.colors IS NOT NULL) 
OR
(m.ds =0 and m.coupon_active=0 and m.affiliate=0 and m.online=0)

您的第一个条件是错误的,但第二个条件是正确的。您的OR将为真

所以在结果集中看到第4行是正常的。

尝试根据您需要的结果更改查询。

关于mysql - SQL 查询 WHERE CLAUSE 未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34083239/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com