MySQL选择发生意外结果的位置

问题描述 投票:1回答:1

我有一个Joomla(3.9.13)数据库,其中包含一个名为fields_values的表,这是一个非规范化的键值存储(因此有人告诉我)。它包含以下数据;

+----------+---------+--------+
| field_id | item_id | value  |
+----------+---------+--------+
| 6        | 119     | bloggs |
| 17       | 119     | 1      |
| 19       | 119     | 45     |
| 21       | 119     | 55     |
| 17       | 119     | 14     |
| 17       | 119     | 100    |
+----------+---------+--------+

当我运行此查询时;

SELECT `field_id`
     , `item_id`
     , `value` 
  FROM `fields_values` 
 WHERE `field_id` IN (6,17) AND `item_id` = '119'

我得到这些结果;

+----------+---------+--------+
| field_id | item_id | value  |
+----------+---------+--------+
| 6        | 119     | bloggs |
| 17       | 119     | 1      |
| 17       | 119     | 2      |
| 17       | 119     | 13     |
| 17       | 119     | 14     |
| 17       | 119     | 100    |
+----------+---------+--------+

这一切似乎很好,但是当我运行此查询时(从6子句中省略IN);

SELECT `field_id`
     , `item_id`
     , `value` 
  FROM `fields_values` 
 WHERE `field_id` IN (17) AND `item_id` = '119'

我得到结果。

我希望获得以下结果;

+----------+---------+--------+
| field_id | item_id | value  |
+----------+---------+--------+
| 17       | 119     | 1      |
| 17       | 119     | 2      |
| 17       | 119     | 13     |
| 17       | 119     | 14     |
| 17       | 119     | 100    |
+----------+---------+--------+

这里是从HeidiSQL取得的表信息;

enter image description here

为什么会这样?

注意:由于核心Joomla系统生成查询,因此我无法更改它。

mysql select joomla denormalized
1个回答
0
投票
MySQL只是

一个元素时,IN优化器会将=转换为IN

下面的查询怎么样?

SELECT `field_id`, `item_id`, `value` 
FROM `fields_values` 
WHERE `field_id` = 17 AND `item_id` = '119'
© www.soinside.com 2019 - 2024. All rights reserved.