我在MariaDB中找到了一些东西而且我不知道如何调查或修复。它只发生在Windows上。 Linux上的MariaDB和Windows上的MySQL都运行良好。可能/可能我做的事情显然是错误的,但我很感兴趣。
我试图在一个简单的表格中重现以提供更多信息,但它确实有效,所以我无法重现。当然还有其他因素会影响行为,但我不知道是什么。
问题:使用IN的子查询不起作用。以下是整体查询:
Select table1.entityKey
from table1
where table1.Deleted = 0
and table1.MasterKey is null
and table1.entityTypeKey = 8
and table1.entityKey in
(select table2.entityKey
from table2
where table2.Flag <> 2
and (table2.IndexKey = 4 and MATCH (table2.xhtmltext) AGAINST ('gold')))
order by table1.entityKey DESC
对于我的数据集,这应该返回值2和3,但是给出一个空集。
所以我拆分查询,我发现这个: 子查询正确返回2,3和4,
select table2.entityKey
from table2
where table2.Flag <> 2
and (table2.IndexKey = 4 and MATCH (table2.xhtmltext) AGAINST ('gold'))
如果我将这些值传递给外部查询,它会正确过滤出4,并给出正确的结果(2,3):
Select table1.entityKey
from table1
where table1.Deleted = 0
and table1.MasterKey is null
and table1.entityTypeKey = 8
and table1.entityKey in
(2,3,4)
order by table1.entityKey DESC
这里可能有什么问题?
由于
答案 0 :(得分:0)
在实际情况下,通常最好避免使用IN ( SELECT ... )
。你的案子很容易改变:
Select table1.entityKey
from table1
JOIN table2 USING(entityKey)
where table1.Deleted = 0
and table1.MasterKey is null
and table1.entityTypeKey = 8
and table2.Flag <> 2
and table2.IndexKey = 4
and MATCH (table2.xhtmltext) AGAINST ('gold'))
order by table1.entityKey DESC
如果不起作用,请从两台机器上提供EXPLAIN SELECT ...
。还SHOW CREATE TABLE
。
答案 1 :(得分:0)
对于遇到此问题的人来说,这确实是一个错误:https://jira.mariadb.org/browse/MDEV-13704