Hier zwei Abfrage auf den ersten Blick gleich:MySQL Vereinigung ist nicht deterministisch
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`;
und
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`;
Sie unterscheiden sich nur mit ausgewählten der Sequenz.
Ergebnis Zeilen Menge aus diesen beiden Abfragen sind unterschiedlich!
Wie ist das möglich?
Wenn ich DISTINCT zu jeder SELECT ... Zeilen Menge hinzufügen, wird der Wert NEW, der größte Wert!
Wenn ich Klammern jedes Add SELECT wie
(select ...)
UNION
(select ...)
Reihen Menge wird der Wert des DISTINCT haben.
könnten Sie bitte posten Sie Ihre Anfragen genau so, wie sie sind, und einige Beispieldaten (genug, um zu reproduzieren) – Quassnoi
Ich denke, es ist deterministisch ist - bei Wenn "obj_id" in beiden Tabellen genau den gleichen Typ hat, stimmt etwas mit dem Test nicht überein. Möglicherweise hängen die Typen von der Reihenfolge der Anweisungen ab, aber die MySQL-Dokumentation behauptet, dass alle Unterabfragen verwendet werden, um die Ausgabetypen zu bestimmen. Sie erkennen, dass es keine Garantie für die Reihenfolge der Ergebnisse gibt, es sei denn, Sie verwenden 'order by'. –