2009-11-20 6 views
3

Existe-t-il un moyen de trier par colonne s'il existe réellement?Commande de IF EXISTS

-à-dire: SELECT * ORDER BY IF(EXISTS(order_column), order_column ASC, name_column DESC)

Merci!

+1

Que voulez-vous dire exactement : Voulez-vous vérifier si la colonne de table existe ou si elle contient des valeurs? Habituellement 'EXISTS' est utilisé en combinaison avec des sous-requêtes afin de vérifier si la sous-requête retourne des enregistrements. Si vous voulez vérifier si la colonne actuelle existe, vous pouvez le faire avec 'SHOW COLUMNS'. –

+3

et s'il vous plaît expliquer ce que vous entendez par "si elle existe", si je prends la signification littérale, si la colonne n'existe pas, la requête ne s'exécutera pas, mais produira une erreur. Si vous voulez dire "si la valeur dans la colonne n'est pas nulle", veuillez éditer votre question pour le dire. –

+0

Je veux vérifier s'il existe réellement. Désolé de ne pas être clair à ce sujet. – Mission

Répondre

2

Vous pouvez utiliser ISNULL lieu

ORDER BY 
    ISNULL(order_column, name_column) 

Je ne sais pas comment vous ajoutez le tho ou ASC ... DESC

0

Non, n'EXISTE doit être utilisé avec une sous-requête et dans la clause WHERE . Pourriez-vous être plus précis? Que voulez-vous dire par «colonne existante»?

1

Voici mon hypothèse non vérifiée:

ORDER BY IF(ISNULL(order_column), "", order_column) ASC, name_column DESC 

Si order_column est NULL, une chaîne vide sera remplacé, ce qui n'affectera le genre. Si ce n'est pas NULL, il sera trié avant la colonne name.

Si Mysql ne vous laissera pas utiliser une expression dans la ORDER BY, vous pouvez toujours créer une colonne « artificielle » dans le SELECT:

SELECT 
    IF (ISNULL(order_column), "  ", order_column) 
    AS my_order_column, 
    name_column 
FROM table 
ORDER BY my_order_column ASC, name_column DESC. 
+0

J'ai trouvé quelque chose de similaire moi-même, mais comme j'ai besoin de trier par order_column seulement s'il existe réellement, cela ne marchera pas ... – Mission

+1

L'un d'entre nous est très malentendu. Pouvez-vous nous donner un exemple de données possibles et le résultat que vous vous attendez à voir? –

0

La meilleure façon de le faire est de créer une expression évaluez le if existe dans le cadre de la requête select. Vous pouvez avoir le retour d'expression order_column ou name_column

implemention dépend de la SQL que vous utilisez, mais là, vous pouvez nous normallly IIf (...) mais vous devrez peut-être vérifier null

Questions connexes