我有一个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取得的表信息;
为什么会这样?
注意:由于核心Joomla系统生成查询,因此我无法更改它。
MySQL
只是一个元素时,IN
优化器会将=
转换为IN
。
下面的查询怎么样?
SELECT `field_id`, `item_id`, `value`
FROM `fields_values`
WHERE `field_id` = 17 AND `item_id` = '119'