子查询在Windows中不起作用,但适用于Linux

时间:2017-08-30 15:32:17

标签: mysql linux windows mariadb

我在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

这里可能有什么问题?

由于

2 个答案:

答案 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