2017-08-27 4 views
1
は、私はちょうど一つの値を選択します。:

sqliteのサブクエリの配信奇妙な結果

SELECT * 
FROM Ethymologie 
WHERE VerbundenesWort IN 
    (SELECT DISTINCT VerbundenesWort FROM 
     (SELECT DISTINCT VerbundenesWort FROM Ethymologie WHERE VerbundenesWort IS   NOT NULL) 
    ORDER BY RANDOM() LIMIT 1) 

の下にクエリの予期しない出力を得る

テーブル(「Ethymologie」)。
次に、同じ値を持つ同じテーブルのすべての行をリストしたいとします。 サブクエリのそれぞれは、魅力のように動作します。

問題のある結果は、SQLクエリ全体を使用する場合にのみ表示されます。 奇妙な結果のスクリーンショットです。

enter image description here

誰も私が間違ってやっているものを私に伝えることができますか?

Thx!

+0

'create ...'のいくつかの行と、 'insert ...'のいくつかの行を試して実証するための基礎として提供してください。 https://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-a-very-simple-sql-query – Yunnosch

+1

結果が奇妙なことを説明してください。 – Yunnosch

+0

あなたのスキーマをMCVEの最小値として表示してください。 – Yunnosch

答えて

0

私は、joint-word = 1のエントリがあなたが奇妙なものであると推測しています。
これは、MCVE、ヒントヒント、または少なくともスキーマのヒントヒントがないために再度推測しなければならないことが原因で発生します。
あなたのスキーマにはテキストとして「ジョイントワード」があります。インデックスと思われるものを別のテーブルに格納します(その詳細の設計上の問題はありません)。

したがって、IN演算子は '10'の中に '1'を見つけるでしょう。

問題の実際の解決策は、ある種の整数(おそらく外部キー)に列を変更することです。

しかし、あなたができない、またはしたくない場合は、
ここにあなたの現在のスキーマを回避するコードがあります。

SELECT * 
FROM Ethymologie 
WHERE VerbundenesWort = 
    (select * 
    from 
     (SELECT DISTINCT VerbundenesWort 
     FROM Ethymologie 
     WHERE VerbundenesWort IS NOT NULL 
     ) 
    order by random() limit 1 
    ); 

あなたはおそらく、あなたの代わりにインデックス/整数の実際の関節の言葉を保存した場合、同じ問題を抱えていることに注意してください。これは、特別な種類のテキストであり、これは結合語で構成されているためです。 「Donaudampfschiffahrtsgesellschaft」の「Donaudampfschiff」を見つけることも問題の原因になります。

いくつかのランダムに選択された単語の1つ(たとえばLIMIT 2)で行のリストを作成できるようにするには、INに固執する必要がありますが、スキーマをint/keyに変更するか、比較のための境界区切り文字はもちろんSQLiteには組み込まれていませんが、ちょっとした魔法でそれを行うことができます。しかし、あなたは、魚のようなスキーマの回避策を作るために使用されるそのような種類の魔法を望んでいませんか? ;-)

+0

良いアイデアだけど、同じ問題だけど、もう一度![Valid XHTML](http://imgur.com/a/NLzb2)。 – baer999

+0

ここにdb strcutureの画像です:http://imgur.com/a/aytEe – baer999

+0

[mcve]を提供するポイントは、StackOverflowの他のユーザーがa)発明/推測する必要がないことですb)あなたの写真の両方の情報を** text **のようにあなたの質問に編集するのはいいですか?サンプルデータベースの内容として「挿入...」という行をいくつか含めることを忘れないでください。 – Yunnosch