Comment sélectionner seulement 1 ligne d'oracle sql?
Je veux utiliser oracle syntaxe pour sélectionner seulement 1 rangée de table DUAL
. Par exemple, je veux exécuter cette requête:
SELECT user
FROM DUAL
...et qu'il faudrait, comme, 40 dossiers. Mais j'ai besoin d'un seul enregistrement. ...ET, je veux le faire se produire sans une WHERE
clause.
J'ai besoin de quelque chose dans le champ table_name tels que:
SELECT FirstRow(user)
FROM DUAL
- Quelle version d'Oracle? À l'aide de ROWNUM ou ROW_NUMBER (9i+) signifie avoir besoin d'une clause where
- Avez-vous le nom d'une table
dual
? dual
est le tableau du système oracle- Exactement. Donc, quelqu'un peut-il créer un autre avec le même nom?
- pas de. le
dual
tableau uneuser
colonne, si. Le "pas de clause where" contrainte semble... artificiel? Pourquoi diable non? - ROWNUM(9i+) , avez-vous une réponse?
- vous ne devriez vraiment pas créer une table appelée
DUAL
. C'est un peu comme#define TRUE 0
en C - bien sûr, il pourrait travailler pour vous, mais les développeurs vous hais. - Avez-vous vraiment essayé d'exécuter
select user from dual
? Si non, s'il vous plaît essayer, et voir ce que vous obtenez. Sur un système oracle, vous allez obtenir l'utilisateur que vous êtes l'exécution de la commande. - double possible de Comment faire top 1 dans Oracle?
- Vieille question, mais je vais voter pour fermer peu claire.
DUAL
a qu'une seule ligne. Si vous avez deux lignes ou d'une autre table appeléedual
ou vous fait une autre table, alors que les changements de la question.
Vous devez vous connecter pour publier un commentaire.
Vous utilisez ROWNUM.
ie.
http://docs.oracle.com/cd/B19306_01/server.102/b14200/pseudocolumns009.htm
order by
.ORDER BY
est appliqué après leWHERE
.SELECT * FROM (SELECT user FROM Employees ORDER BY SALARY DESC) WHERE ROWNUM <= 10
J'ai trouvé cette "solution" caché dans un des commentaires. Depuis que j'ai été regardant pour un temps, j'aimerais parler un peu (ou ne peuvent pas encore de commentaires ou de faire ce genre de trucs...), donc c'est ce que j'ai utilisé:
Cette impression sera moi la touche souhaitée [Colonne] d'entrée de la nouvelle entrée dans la table, en supposant que [Date] est toujours inséré par l'intermédiaire SYSDATE.
ROWID
, aussi longtemps que vous n'avez jamais supprimer tous les enregistrements et toujours des soins à propos de la dernière insertion/modification d'une seule.ROWID
aléatoire est modifié par Oracle. Il n'est pas. Il est basé sur le fait de modifier les lignes, c'est à dire vous en supprimez un, puis insérer une. Le insérée on obtient l'ancien duROWID
. Il ya des choses telles que des tables statiques que jamais mis à jour-comme les états aux états-UNIS est un bon exemple-où si il a changé, il aurait probablement d'autres répercussions, de toute façon, quand c'est bien.ROWID
pourrait être changé, une bonne DBA serait de les regarder et de faire ce qu'ils pouvaient pour éviter si il y avait la possibilité qu'ils ont une incidence sur ces un tableau statique comme je l'ai décrit que seule l'application doit être en fonctionnement sur. Une table à l'exportation peut être fait avec uneSELECT
instruction, à la place. L'importation allait se passer une fois et plus jamais ensuite. Je reçois votre point de vue, il est absolument nécessaire, mais les problèmes sont loin d'être inévitable.Cette syntaxe est disponible dans Oracle 12c:
^^Je voulais juste démontrer que la ligne ou les lignes (au pluriel) peut être utilisé indépendamment de la pluralité du nombre de lignes.)
Autant que je sache, le
dual
table Oracle est une table spéciale avec seulement une ligne. Donc, cela devrait suffire:Il n'y a pas de
limit 1
condition (c'est MySQL /PostgresSQL) dans Oracle, vous devez spécifierwhere rownum = 1
."FirstRow" Est une restriction et à cet effet, de sa place dans le
where
clause de non pas dans leselect
clause. Et il a appelé rownumORDER BY
, depuis la commande n'arrive après la clause where. En d'autres termes, pour obtenir le haut d'une certaine requête triée, rownum est tout à fait inutile.Where
en Vue de la requête.SELECT * FROM (SELECT * FROM ... WHERE ... ORDER BY ...) WHERE ROWNUM = 1
? Eh bien, cela peut fonctionner, mais il a l'air assez bête, tbh.nous avons 3 choix pour obtenir la première ligne de l'Oracle de la table DB.
1)
select * from table_name where rownum= 1
est la meilleure façon2)
select * from table_name where id = ( select min(id) from table_name)
3)
La réponse est:
Vous devez utiliser des requêtes imbriquées comme:
=> En PL/SQL "ROWNUM = 1" n'est PAS égal à "1" de TSQL.
De sorte que vous ne pouvez pas utiliser une requête comme ceci: "select * from any_table_x where rownum=1 order by any_column_x;" Car oracle obtient la première ligne, puis applique la clause order by.
rownum = 1
, mais il ne faut pas laisser les vieux bugs affectent notre code plus.Si tout ligne, essayez:
Pas de clause where.
Plus souple que
select max()
est: