9
votes

MySQL Union commande

est-il possible de commander la première enquête et de garder les lignes retournées comme d'abord et ne commandez pas la deuxième enquête. (Si cela fait du sens)

Un exemple de mon enquête actuelle est le suivant: P>

SELECT
    *
FROM 
    Devices
WHERE
    Live = 'true'
    AND Category = 'apple'
ORDER BY
    ListOrder
UNION
SELECT
        *
    FROM
        Devices
    WHERE
        DeviceLive = 'true'


0 commentaires

4 Réponses :


18
votes

Vous auriez besoin d'introduire une clé de tri artificielle. Quelque chose comme: xxx


3 commentaires

C'est comme ça que j'ai accompli dans le passé


Travaillé comme un régal, merci Joe!


Bonjour, je n'avais pas besoin de créer une clé de tri artificielle, je viens de m'assurer que chaque table avait la même nom de la colonne que je voulais trier. Dans mon cas, le nom de la colonne était "ordre". Donc, j'ai fait: SELECT *, COMMANDEZ AS URDODER DE TABLE 1 SELECT *, COMMANDEZ COMMUDER DE TABLEAU 2 COMMANDE PAR URONDER



3
votes

Vous pouvez simuler

SELECT col1, col2 ... 
FROM (
  SELECT 1 fake_order, col1, col2 ... FROM Devices WHERE Live ='true' AND Category='apple' ORDER BY ListOrder
  UNION ALL
  SELECT 2, col1, col2 ... FROM Devices WHERE DeviceLive ='true'
) AS T 
ORDER BY fake_order


2 commentaires

Je sais que c'est vieux, mais pour être complet (et je note que vous dites que ceci est non testé), vous devez nommer la requête interne pour que cela fonctionne.


@Tomheard - SQL Syntaxe permet au comme en option, afin de la lisibilité, je le laisserai.



5
votes

Union a une fonction de déplication implicite. Cela signifie qu'un effet secondaire de l'utilisation de ce fait que tout est préparé ensemble comme il est trié pour que cela se produise. Cela signifie également (généralement, mais pas toujours) signifie que vous obtenez une sortie triée (voir paragraphe suivant).

Union Tout supprime cela, mais il reste-t-il toujours la mise en garde qui sortit d'une requête sans ordre explicite par n'a pas de commande garantie. Cela a été couvert par une autre réponse, mais je pensais que cela valait la peine de souligner pourquoi cela compte.


1 commentaires

Merci, je cherchais une raison pour laquelle mon plan d'exécution faisait une sorte. Cela répond à cela et mon problème de commande étrange.



0
votes

J'ai eu ma réponse de Joe Stefanelli, mais j'ai modifié un peu:

Bonjour, je n'avais pas besoin de faire une clé de tri artificielle, je viens de m'assurer que chaque table avait le même nom de la colonne que je voulait trier. Dans mon cas, le nom de la colonne était "ordre". Donc, j'ai fait: xxx


0 commentaires