2016-04-13 8 views
0

確定的ではありません2で一目でクエリに等しい:MySQLの労働組合は、ここで

SELECT obj_id 
FROM obj t JOIN joined_a a ON t.`id` = a.`obj_id` 
UNION 
SELECT obj_id 
FROM obj t JOIN joined_b b ON t.`id` = b.`obj_id`; 

SELECT obj_id 
FROM obj t JOIN joined_b b ON t.`id` = b.`obj_id` 
UNION 
SELECT obj_id 
FROM obj t JOIN joined_a a ON t.`id` = a.`obj_id`; 

彼らは唯一の選択配列と異なっています。

この2つのクエリの結果の行数は異なります。

どうすれば可能ですか?

各SELECTにDISTINCTを追加すると、行数量にNEW値(最大値)が設定されます。

私は

(select ...) 
UNION 
(select ...) 

のようなSELECTそれぞれにブラケットを追加した場合、行量がのDISTINCT値を持つことになります。

+0

あなたは彼らが正確にクエリを投稿してください可能性があり、いくつかのサンプルデータが(十分に再現するために) – Quassnoi

+0

私はそれが決定的であると思います - ?で少なくとも 'obj_id'が両方のテーブルでまったく同じ型を持っているなら、あなたのテストでは何かが間違っています。おそらく、型は文の順序に依存するかもしれませんが、MySQLドキュメントはすべての副問い合わせが出力型を決定すると主張しています。あなたは 'order by'を使わない限り、結果の順序には保証がないことを理解しています。 –

答えて

1

これらの2つのクエリは同じ行を返しますが、必ずしも同じ順序である必要はありません。

UNIONは結果を重複するので、DISTINCTは何もせず、結果セットのサイズはSELECTの順序に関係なく同じです。

あなたのテストに合った唯一の説明は、2つの実行の間にさらに多くのデータが挿入されていることです。

0

あなたは正しいです!

私は、SQLYogの究極のGUIインターフェイスv11.11 BUG-feacherで狡猾な罠に入った!

GUIは各クエリにLIMIT 0、1000を追加します。 。接尾 :(

チェックコマンドラインでのクエリと、それは仕事の罰金だ

+0

結局のところ、別の説明があったと思います! – Arth

関連する問題