2010-11-02 10 views
2

首先,这里的表:MariaDB的,PBXT和神秘的查询结果

CREATE TABLE `outlet_tags` (
    `id` int(11) unsigned NOT NULL AUTO_INCREMENT, 
    `importer_id` int(11) NOT NULL, 
    `outlet_id` int(11) NOT NULL, 
    `code` varchar(20) NOT NULL, 
    `postcode` varchar(15) DEFAULT NULL, 
    `tag_set` varchar(45) DEFAULT NULL, 
    `tag_type` varchar(45) DEFAULT NULL, 
    `tag_details` varchar(100) DEFAULT NULL, 
    PRIMARY KEY (`id`), 
    KEY `fk_report_outlet_tags_1` (`importer_id`), 
    KEY `fk_report_outlet_tags_2` (`outlet_id`), 
    KEY `outlet_tag_set` (`tag_set`), 
    KEY `outlet_tag_type` (`tag_type`), 
    KEY `outlet_tag_details` (`tag_details`), 
    CONSTRAINT `fk_report_outlet_tags_1` FOREIGN KEY (`importer_id`) REFERENCES `importers` (`id`), 
    CONSTRAINT `fk_report_outlet_tags_2` FOREIGN KEY (`outlet_id`) REFERENCES `outlets` (`id`) 
) ENGINE=PBXT DEFAULT CHARSET=utf8; 

任何人都能够解释为什么字段值取决于下面的查询中使用条件改变任何光线?如果发动机是玛丽亚,那不会发生。

select * from outlet_tags where code=1503 and outlet_id=407 limit 3; 
+------+-------------+-----------+------+----------+---------+-----------------+----------------+ 
| id | importer_id | outlet_id | code | postcode | tag_set | tag_type  | tag_details | 
+------+-------------+-----------+------+----------+---------+-----------------+----------------+ 
| 222 |   1 |  407 | 1503 | XXX XXX | outlet | Make up   | Make up  | 
| 675 |   1 |  407 | 1503 | XXX XXX | outlet | Approved Status | Approved  | 
| 1619 |   1 |  407 | 1503 | XXX XXX | outlet | Retail Area  | No Retail Area | 
+------+-------------+-----------+------+----------+---------+-----------------+----------------+ 
3 rows in set (0.00 sec) 

select * from outlet_tags where code=1503 and importer_id=1 limit 3; 
+------+-------------+-----------+------+----------+---------+-----------------+----------------+ 
| id | importer_id | outlet_id | code | postcode | tag_set | tag_type  | tag_details | 
+------+-------------+-----------+------+----------+---------+-----------------+----------------+ 
| 222 |   1 |  407 | 1503 | XXX XXX | outlet | Make up   | Make up  | 
| 675 |   1 |  407 | 1503 | XXX XXX | outlet | Approved Status | Approved  | 
| 1619 |   1 |  407 | 1503 | XXX XXX | outlet | Retail Area  | No Retail Area | 
+------+-------------+-----------+------+----------+---------+-----------------+----------------+ 
3 rows in set (0.00 sec) 

select * from outlet_tags where importer_id=1 and outlet_id=407 limit 3; 
+------+-------------+-----------+------+----------+---------+----------+-------------+ 
| id | importer_id | outlet_id | code | postcode | tag_set | tag_type | tag_details | 
+------+-------------+-----------+------+----------+---------+----------+-------------+ 
| 222 |   1 |  407 | 1503 | NULL  | NULL | NULL  | NULL  | 
| 675 |   1 |  407 | 1503 | NULL  | NULL | NULL  | NULL  | 
| 1619 |   1 |  407 | 1503 | NULL  | NULL | NULL  | NULL  | 
+------+-------------+-----------+------+----------+---------+----------+-------------+ 
3 rows in set (0.00 sec) 

更新:如MariaDB的5.5 PBXT was dropped as a storage engine

+0

有谁认为它可能是不正确的索引数据导致NULL值?第三个查询是唯一在WHERE条件中仅使用索引字段的人 – Cez 2011-10-09 21:07:49

回答

1

尝试使用ORDER BY与查询。

不同的引擎可能会按不同的顺序返回行,这取决于行的检索方式。

+2

感谢您将这一个从死亡中带回来!虽然我不确定我是否理解你的评论。由3个查询返回的行具有匹配的PK,因此是相同的行,但第三个查询具有NULL值,其他2个具有有效数据。 – Cez 2011-09-26 20:59:03