2017-08-30 52 views
0

MariaDBで何かを見つけました。調査方法や修正方法がわかりません。 Windows上でのみ発生します。 Linux上のMariaDBとWindows上のMySQLはどちらもうまく機能します。おそらく/私は間違ったことを明らかにしていますが、私は興味をそそられています。サブクエリはWindowsでは動作しませんが、Linux上で動作します

詳細な情報を提供するために単純な表で再現しようとしましたが、実際には機能しないため、再現できません。確かに他の何かが行動に影響を与えているが、私は何がわからない。

問題: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を返しますが、空のセットを与える必要があります。

だから私は、クエリを分割し、私はこれを見つける: サブクエリは正しく私は外部クエリにこれらの値を渡すと、それは正しく4を除外し

select table2.entityKey 
    from table2 
    where table2.Flag <> 2 
    and (table2.IndexKey = 4 and MATCH (table2.xhtmltext) AGAINST ('gold')) 

、2、3、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

が、その組み合わせは、それはバグの兆候だしません。 https://jira.mariadb.orgで報告してください。 Windows/Linuxの違いについては、LinuxとWindowsで異なるMariaDBバージョンがあり、そのうちの1つにバグがあり、別のバージョンではバグがあります。各サーバの 'SELECT @@ version'の出力を比較してください。別の考えられる理由は、サーバーの設定が異なり、構成の1つがバグを明らかにするということです。バージョンが同じ場合は、 'SHOW VARIABLES'の出力を比較します(パスなどを無視します)。 – elenst

+0

MyISAM? InnoDB?両方のシステムで同じですか? –

+0

これは実際にバージョン10.2以降のバグであるようです。いくつかのテストを行い、問題を報告します。 – costateixeira

答えて

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。このが発生した人のために

関連する問題