2010-01-25 4 views
1

Est-il possible d'écrire une seule requête qui peut retourner deux lignes, l'une spécifiée dans une clause WHERE et l'autre la plus haute dans la table.mysql - un SELECT qui renvoie les 'vues' les plus élevées et les 'views' d'un identifiant spécifique

Par exemple.

Table_1 
-row_id 
-views 
-content 

Y at-il une question qui peut se combiner les éléments suivants:

SELECT views FROM Table_1 WHERE row_id = 10 

SELECT MAX(views) FROM Table_1 

ou est deux requêtes ma seule option?

Répondre

1

Je ne pense pas qu'il soit possible d'utiliser techniquement une seule requête; Cependant, vous pouvez utiliser l'opérateur UNION

SELECT views FROM Table_1 WHERE row_id = 10 

UNION 

SELECT MAX(views) FROM Table_1 
+0

DESC est une Union plus efficace que deux requêtes distinctes? – Mark

+0

hmmm ... Personnellement, je pense que Union sera «légèrement» mieux alors envoyer deux requêtes; – effkay

2

Vous pouvez le faire avec une sous-requête:

SELECT (SELECT MAX(views) FROM Table_1) as max_view, views 
FROM Table_1 
WHERE row_id = 10 

Chaque ligne aurait la même valeur max_view en elle. Je ne suis pas sûr de l'effet que cette requête aurait sur les performances avec un grand nombre de lignes, cependant.

+0

'(SELECT MAX (vues) FROM Table_1) AS max'! – hsz

+0

Ah oui, j'ai eu la mauvaise commande, merci hsz. –

+0

Ce ne sera pas deux lignes. – Martin

0

Utilisez une instruction UNION:

SELECT views FROM Table_1 WHERE row_id = 10 
UNION 
SELECT MAX(views) FROM Table_1 
0

Deux lignes, une avec la ligne sélectionnée et l'autre avec la ligne la plus haute vue.

SELECT * DE Table_1 OÙ row_id = 10 OU = vues (SELECT MAX (vues) DE LIMITE Table_1 1) TRIER PAR row_id = 10

+0

Seulement essayer de vous aider! Le vote à la baisse sans explication n'est pas décent. – Martin

+0

Pas moi. Merci pour votre contribution. – Mark

Questions connexes