Bonjour,
savez vous comment avec des instructions SQL je pourrais déterminer avec un count les champs qui constitue la clé d'une table sachant que sur cette table aucune PK n'a été définie ?
Merci d'avance
Mederik
Bonjour,
savez vous comment avec des instructions SQL je pourrais déterminer avec un count les champs qui constitue la clé d'une table sachant que sur cette table aucune PK n'a été définie ?
Merci d'avance
Mederik
C'est pas possible avec un count (??) puisque ça ramène un entier !
sinon pour trouver la clef primaire, regarde ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 SELECT cols.table_name, cols.column_name, cols.position, cons.status, cons.owner FROM all_constraints cons, all_cons_columns cols WHERE cons.constraint_type = 'P' AND cons.constraint_name = cols.constraint_name AND cons.owner = cols.owner ORDER BY cols.table_name, cols.position;
Arf j'ai souvenir d'avoir ete confronté une fois a ce probleme il y a longtemps et j'avais trouve un SQL avec des count, des sous-requetes si ces souvenir sont bons et en comparant le resultat avec le count(*) de la table.
Mais je suis tres rouillé en SQL, j'ai predu les reflexes et c'etait il y a longtemps et je ne me souviens plus de la logique. Mais je sais que c'est possible ;-)
Et ma requête ne te satisfait pas puisqu'elle retourne les clefs primaires des tables ? C'était bien ça ton besoin ??
Je pense que mederik n'a pas définit de clé primaire (le langage SQL le permet...) et veux la deviner.
L'idée c'est de comparer le nombre de lignes de la table avec le nombre de valeur distinctes dans chaque colonnes.
Exemple avec MySQL:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 create table t ( a integer, b integer, c integer, d integer ); insert into t values (1, 2, NULL, 2), (2, 3, NULL, 4), (4, 6, 1, NULL), (9, 6, NULL, 1);
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 SELECT (SELECT Count(*) FROM t) AS nbLignes, (SELECT Count(DISTINCT a) FROM t) AS nbColA, (SELECT Count(DISTINCT b) FROM t) AS nbColB, (SELECT Count(DISTINCT c) FROM t) AS nbColC, (SELECT Count(DISTINCT d) FROM t) AS nbColD;Ici, la colonne "a" garanti la propriété d'unicité d'une clé primaire.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 nbLignes nbColA nbColB nbColC nbColD 4 4 3 1 3
Mais cela reste du bricolage, il faut définir la clé primaire en amont.
PS: Je pense que pour Oracle il suffit d'ajouter un: "FROM dual;"
Oui c'est ça; a la différence que ce n'est pas moi qui ait créé cette table
En effet je cherchais donc à la deviner. Ton script, d'apres mes souvenirs de ce que j'avais fait est encore plus simple que ce que moi j'avais trouvé...
En tous cas merci à vous deux pour vos réponses
Bon WE ou bonne semaine, au choix
Mederik
Partager