MariaDB:在带有计数的视图的子查询中的条件

时间:2015-07-01 14:32:40

标签: mysql view subquery cluster-computing mariadb

我使用带有count和IN条件的子查询的SQL查询:

SELECT *
FROM table1
INNER JOIN table2 USING (field1)
WHERE table2.field2 > NOW()
AND (
    SELECT count(*) FROM view
    WHERE view.field3 = table1.field3
    AND view.field4 IN (1,7,12,18)
) <> table1.field6

在将view表替换为VIEW之前,一切正常。 现在,我得到table1 join table2中匹配table2.field2 > NOW()的所有行。第二个条件似乎总是有效。

我必须用OR替换IN条件才能使其正常工作

SELECT *
FROM table1
INNER JOIN table2 USING (field1)
WHERE table2.field2 > NOW()
AND (
    SELECT count(*) FROM view
    WHERE view.field3 = table1.field3
    AND (view.field4 = 1 OR view.field4 = 7 OR view.field4 = 12 OR view.field4 = 18)
) <> table1.field6

我做错了吗?它是MariaDB的错误吗?有什么解决方案吗?

非常感谢

修改

这是EXPLAIN SELECT(它们对于两个查询完全相同):

id  select_type        table  type   possible_keys         key     key_len ref                   rows Extra
1   PRIMARY            table2 range  PRIMARY,field2        field2  8       NULL                  1927 Using index condition
1   PRIMARY            table1 ref    PRIMARY               PRIMARY 4       bddname.table2.field1 1    Using where
2   DEPENDENT SUBQUERY table3 ref    PRIMARY,field3,field4 field3  4       bddname.table1.field3 72   Using where
2   DEPENDENT SUBQUERY table4 eq_ref PRIMARY               PRIMARY 4       bddname.table3.field5 1    Using index

这是CREATE VIEW

CREATE ALGORITHM=UNDEFINED DEFINER=`****`@`******` SQL SECURITY DEFINER VIEW `view`
AS SELECT
`table4`.`field5` AS `field5`,
`table3`.`field3` AS `field3`,
`table3`.`field4` AS `field4`,
--... some other fields
FROM (`table4` join `table3` on((`table4`.`field5` = `table3`.`field5`)))

MariaDB服务器是一个包含4台服务器的集群。

0 个答案:

没有答案