de l'utilité du "from t1 a , t1 b"

de l'utilité du "from t1 a , t1 b" - SQL/NoSQL - Programmation

Marsh Posté le 05-06-2007 à 22:34:44    

Salut,
 
je souhaite savoir à quoi sert , quel resultat obtient t'on avec une requete du type
 
select champ1, champ2  
from table1 a, table1 b
where champ4 = 'toto'
and a.id = b.id;
 
a quoi sert le test d'egalité  a.id = b.id ?
quel operation effectue t'il ?
 
Merci
 

Reply

Marsh Posté le 05-06-2007 à 22:34:44   

Reply

Marsh Posté le 05-06-2007 à 22:43:38    

Exemple:
 
Table1: (id / prenom)
1 / Pierre
2 / Paul
3 / Jacques
 
Table2: (id / nom)
1 / Dupont
2 / Durant
3 / Ducon
 
1er Requête :  

Select a.nom,a.id,b.id,b.prenom
  from table2 a,table1 b


Résultat:
Dupont,1,1,Pierre
Durant,2,1,Pierre
Ducon,3,1,Pierre
Dupont,1,2,Paul
Durant,2,2,Paul
Ducon,3,2,Paul
Dupont,1,3,Jacques
Durant,2,3,Jacques
Ducon,3,3,Jacques
 
Tu as un produit cartésien table1 x table 2
 
2eme Requête :  

Select a.nom,a.id,b.id,b.prenom
  from table2 a,table1 b
where a.id = b.id


Résultat:
Dupont,1,1,Pierre
Durant,2,2,Paul
Ducon,3,3,Jacques
 
Plus simple tu meurs  [:prodigy]
 
Edit: en gros la requête 2 fait ca:
Dupont,1,1,Pierre
Durant,2,1,Pierre
Ducon,3,1,Pierre
Dupont,1,2,Paul
Durant,2,2,Paul
Ducon,3,2,Paul
Dupont,1,3,Jacques
Durant,2,3,Jacques
Ducon,3,3,Jacques


Message édité par thecoin le 05-06-2007 à 22:47:10
Reply

Marsh Posté le 06-06-2007 à 18:54:44    

donc comme je le pensai, faire :
 
select champ1, champ2  
from table1 a, table1 b
where champ4 = 'toto'
and a.id = b.id;  
 
ne sert strictement à rien ...

Reply

Marsh Posté le 06-06-2007 à 20:05:37    

si champ4 = a.id = b.id = 'toto', oui.

Reply

Marsh Posté le 09-06-2007 à 12:30:35    

crapodesiles a écrit :

donc comme je le pensai, faire :
 
select champ1, champ2  
from table1 a, table1 b
where champ4 = 'toto'
and a.id = b.id;  
 
ne sert strictement à rien ...


on sait pas ce que c'est que le champ4 ni dans quelle table il est, donc ton exemple ne veut strictement rien dire.
 
Reprenons
 
Table 1 : user (id_user | nom_user)
 
Table 2 : adresse (id_adresse | id_user | libelle_adresse)
 
Dans la table 1 on a :
1 / Robert
2 / Michel
 
Dans la table 2 on a :
1 / 1 / 79 rue du poirier
2 / 2 / 45 rue des pommiers
 
Tu veux récupérer l'adresse de Michel
 
Solution 1 : (nawak)
 
select a.nom_user, b.libelle_adresse
from user a, adresse b
where a.nom_user = 'Michel'
 
Tu auras comme résultat :  
Michel / 79 rue du poirier
Michel / 45 rue des pommiers
 
==> donc c'est tout faux.
 
Si tu ajoutes dans la clause where : "and a.id_user = b.id_user"
tu auras bien : Michel / 45 rue des pommiers

Reply

Marsh Posté le 09-06-2007 à 15:48:00    

Euh juste au passage.. pourquoi vous parlez d'une table2 ?
 
Moi dans son exemple je vois:
 
table1 ( #id, champ1, champ2, champ4, ... )
 
contenant par exemple
{1, Durand, Robert, durand@robert.fr }
{2, Julia, Didier, toto }
{3, Henry, Thierry, thenry@fff.fr }
 
donc
 

select champ1, champ2  
from table1 a, table1 b
where champ4 = 'toto'
and a.id = b.id;


renvoie {Julia, Didier}
(voir si eventuellement il ne faut pas préciser de quelle table (a ou b) on tire champ1 et champ2 dans la clause select)
 
et
 

select champ1, champ2  
from table1
where champ4 = 'toto';


renvoie aussi {Julia, Didier}
 
donc dans cet exemple l'utilité du "from t1 a , t1 b" je ne la vois pas...


Message édité par mcyrb le 09-06-2007 à 15:54:56
Reply

Marsh Posté le 09-06-2007 à 17:43:47    

effectivement, j'avais pas vu que c'était sur la même table :jap:
Donc non, aucun intéret :D

 

Toujours est-il que sa question est loin d'être claire. Est-ce que l'exemple du premier post résume bien sa question ? J'en suis pas sûr.
Est-ce que sa question porte simplement sur l'utilité du "from t1 a, t1 b" comme le laisse supposer le titre du topic ?
Ca change tout ;)


Message édité par tet2neu le 09-06-2007 à 17:46:32
Reply

Marsh Posté le 11-06-2007 à 10:22:00    

Pffffffff :heink:
 
Ca vous arracherait le cul de repecter un tant un soit la norme ?
 
Si un champ dans une clause WHERE / ORDER BY ou GROUP BY peut porter à confusion (y compris -ET SURTOUT- dans le cas où on sélectionne deux fois le même champs dans la même table) ça provoque une erreur. C'est ce que dit la norme. Après, MySQL peut faire de la merde, arrêtez de prendre ça comme une règle !
 
Le nom qui suit un nom de table s'appelle un "alias". Ce nom permet de préfixer les champs des tables d'une façon presonnalisée dans la requête, ce qui permet d'améliorer la lisibilité. En cas d'appels successifs de la même table, cet alias permet de différencier les différents appels à cette même table.
 
Mettons par exemple les deux tables :
 
device
---------
id
name
price
 
property
---------
device_id
code

value
 
Avec les informations :
device
id  name price
1   pro1 100 €
2   pro2 150 €
3   pro3 25 €
 
property
device_id code value
1       FAM   VGA
1       BUS   AGP
1       SPD   4x
2       FAM   VGA
2       BUS   PCI-E
2       SPD   16x
3       FAM   NET
3       BUS   PCI
3       SPD   1 Gb
 
=> Je veux connaître le nom, le type de bus et le prix des cartes graphiques
 
select d.name, bus.value, d.price
from device d
inner join property vga on vga.device_id = d.id and vga.code = 'FAM' and vga.value = 'VGA'
inner join property bus on bus.device_id = d.id and bus.code = 'BUS'
 
=> Sans alias cette requête est impossible à faire. Et il est important que le "code" de property selon si on parle de "vga" ou de "bus" soit différent si on veut effectuer les filtres désirés.

Message cité 1 fois
Message édité par MagicBuzz le 11-06-2007 à 10:23:14
Reply

Marsh Posté le 12-06-2007 à 00:24:30    

MagicBuzz a écrit :

Ca vous arracherait le cul de repecter un tant un soit la norme ?


respecte au moins la langue française :o

Reply

Marsh Posté le 12-06-2007 à 10:28:47    

Ben quoi ? Y'a pas de faute :o

Reply

Marsh Posté le 12-06-2007 à 10:28:47   

Reply

Marsh Posté le 12-06-2007 à 10:29:26    

ah ouais si j'ai oublié un s il est vrai :o
 
c'est parceque le S ça ressemble un poil de cul et je l'ai arraché :o
 
au ouais pis j'ai oublié un mot aussi.
 
ouais mais peu et pet ça se ressemble :o
 
bon, ok, je vais me coucher. relou :o


Message édité par MagicBuzz le 12-06-2007 à 10:30:02
Reply

Marsh Posté le 12-06-2007 à 11:48:27    

Dans l'exemple on peut pas trop voir à quoi ça sert mais je me rappelle que pour une intersection sous sqlserver, j'avais eu besoin de faire un truc du genre.

Reply

Marsh Posté le 12-06-2007 à 11:49:15    

Dans mon exemple on voit parfaitement l'utilité :o

Reply

Marsh Posté le 12-06-2007 à 11:49:52    

Oui mais tu as compliqué inutilement je trouve :o

Reply

Marsh Posté le 12-06-2007 à 11:53:55    

Dans cet exemple aussi si tu préfères :

Code :
  1. SELECT p.codpro "Code Article", p.nompro "Désignation", p.codblocage "Statut", p.gencod "EAN13", p.ssfpro "Collection", d2.c01 "DPT2", d3.c02 "DPT3"
  2. FROM pro p
  3. INNER JOIN dsk d2 ON d2.codsoc = p.codsoc AND d2.sigdep = 'DPT2' AND d2.codpro = p.codpro
  4. INNER JOIN dsk d3 ON d3.codsoc = p.codsoc AND d3.sigdep = 'DPT2' AND d3.codpro = p.codpro
  5. WHERE p.codsoc = 2
  6. AND p.suistk = 'S'


 
Ou celui-ci si tu préfère :o :

Code :
  1. SELECT sigtie, nomtie, sigdep, libfam, codpro, design1, stk, codblocage, pump, 'EUR' coddevp, vtar, coddevv, atar, coddeva, rev, coddevr
  2. FROM (
  3. SELECT
  4.        pro.sfapro,
  5.        pro.ssfpro,
  6.        dsk.codsoc,
  7.        tie.sigtie, tie.nomtie,
  8.        prc.refpro,
  9.        pro.codpro, pro.design1, pro.codblocage, pro.ssfpro,
  10.        dsk.sigdep, dsk.C01 + (dsk.C04 + dsk.C05) - (dsk.C02 + dsk.C03) stk, dsk.pump,
  11.        vtar.prxtar vtar, vtar.coddev coddevv, atar.prxtar atar, atar.coddev coddeva, rtar.prxrev rev, rtar.coddev coddevr, fam.libfam
  12. FROM
  13.        fam, dsk, pro, tie, prc, tsc vtar, tsc atar, tsc rtar
  14. WHERE
  15.     pro.codsoc = dsk.codsoc
  16. AND pro.codpro = dsk.codpro
  17. AND pro.codblocage <> 'SOM'
  18. AND fam.codsoc = pro.codsoc
  19. AND fam.codefam = pro.fampro
  20. AND fam.codesfa = pro.sfapro
  21. AND fam.codessf = pro.ssfpro
  22. AND tie.codsoc = pro.codsoc
  23. AND tie.typtie ='FOU'
  24. AND tie.sigtie = pro.sigfou
  25. AND prc.codsoc = pro.codsoc
  26. AND prc.codpro = pro.codpro
  27. AND prc.typtie = 'FOU'
  28. AND prc.sigfou = tie.sigtie
  29. AND (dsk.c01 > 0 OR dsk.C04>0 OR dsk.C05>0 OR dsk.C02>0 OR dsk.C03>0)
  30. AND vtar.codsoc(+)=dsk.codsoc
  31. AND vtar.achvte(+)='V'
  32. AND vtar.sigtie(+)=' '
  33. AND vtar.codpro(+)=dsk.codpro
  34. AND vtar.coddev(+)='EUR'
  35. AND nvl(vtar.datdeb, to_char(sysdate, 'YYYYMMDD'))=(SELECT
  36.                         nvl(max(tsc.datdeb),to_char(sysdate,'YYYYMMDD'))
  37.                    FROM
  38.                            tsc
  39.                    WHERE
  40.                           tsc.codsoc=dsk.codsoc
  41.                    AND tsc.achvte='V'
  42.                    AND tsc.sigtie=' '
  43.                    AND tsc.codpro=dsk.codpro
  44.                    AND tsc.coddev='EUR')
  45. AND atar.codsoc=dsk.codsoc
  46. AND atar.achvte='A'
  47. AND atar.codpro=dsk.codpro
  48. AND atar.coddev=tie.coddev
  49. AND nvl(atar.datdeb, to_char(sysdate, 'YYYYMMDD'))=(SELECT
  50.                         nvl(max(tsc.datdeb),to_char(sysdate,'YYYYMMDD'))
  51.                    FROM
  52.                            tsc
  53.                    WHERE
  54.                           tsc.codsoc=dsk.codsoc
  55.                    AND tsc.achvte='A'
  56.                    AND tsc.codpro=dsk.codpro
  57.                    AND tsc.coddev=atar.coddev
  58. )
  59. AND rtar.codsoc(+)=dsk.codsoc
  60. AND rtar.achvte(+)='R'
  61. AND rtar.codpro(+)=dsk.codpro
  62. AND rtar.coddev(+)='EUR'
  63. AND nvl(rtar.datdeb, to_char(sysdate, 'YYYYMMDD'))=(SELECT
  64.                         nvl(max(tsc.datdeb),to_char(sysdate,'YYYYMMDD'))
  65.                    FROM
  66.                            tsc
  67.                    WHERE
  68.                           tsc.codsoc=dsk.codsoc
  69.                    AND tsc.achvte='R'
  70.                    AND tsc.codpro=dsk.codpro
  71.                    AND tsc.coddev='EUR')
  72. union
  73. SELECT
  74.        pro.sfapro,
  75.        pro.ssfpro,
  76.        dsk.codsoc,
  77.        tie.sigtie, tie.nomtie,
  78.        prc.refpro,
  79.        pro.codpro, pro.design1, pro.codblocage, pro.ssfpro,
  80.        dsk.sigdep, dsk.C01 + (dsk.C04 + dsk.C05) - (dsk.C02 + dsk.C03), dsk.pump,
  81.        vtar.prxtar vtar, vtar.coddev coddevv, atar.prxtar atar, atar.coddev coddeva, rtar.prxrev rev, rtar.coddev coddevr, fam.libfam
  82. FROM
  83.        fam, dsk, pro, tie, prc, tsc vtar, tsc atar, tsc rtar
  84. WHERE
  85.     pro.codsoc = dsk.codsoc
  86. AND pro.codpro = dsk.codpro
  87. AND pro.codblocage <> 'SOM'
  88. AND fam.codsoc = pro.codsoc
  89. AND fam.codefam = pro.fampro
  90. AND fam.codesfa = pro.sfapro
  91. AND fam.codessf = pro.ssfpro
  92. AND tie.codsoc = pro.codsoc
  93. AND tie.typtie ='FOU'
  94. AND tie.sigtie = pro.sigfou
  95. AND prc.codsoc = pro.codsoc
  96. AND prc.codpro = pro.codpro
  97. AND prc.typtie = 'FOU'
  98. AND prc.sigfou = tie.sigtie
  99. AND dsk.sigdep = pro.sigdep
  100. AND vtar.codsoc(+)=dsk.codsoc
  101. AND vtar.achvte(+)='V'
  102. AND vtar.sigtie(+)=' '
  103. AND vtar.codpro(+)=dsk.codpro
  104. AND vtar.coddev(+)='EUR'
  105. AND nvl(vtar.datdeb, to_char(sysdate, 'YYYYMMDD'))=(SELECT
  106.                         nvl(max(tsc.datdeb),to_char(sysdate,'YYYYMMDD'))
  107.                    FROM
  108.                            tsc
  109.                    WHERE
  110.                           tsc.codsoc=dsk.codsoc
  111.                    AND tsc.achvte='V'
  112.                    AND tsc.sigtie=' '
  113.                    AND tsc.codpro=dsk.codpro
  114.                    AND tsc.coddev='EUR')
  115. AND atar.codsoc=dsk.codsoc
  116. AND atar.achvte='A'
  117. AND atar.codpro=dsk.codpro
  118. AND atar.coddev=tie.coddev
  119. AND nvl(atar.datdeb, to_char(sysdate, 'YYYYMMDD'))=(SELECT
  120.                         nvl(max(tsc.datdeb),to_char(sysdate,'YYYYMMDD'))
  121.                    FROM
  122.                            tsc
  123.                    WHERE
  124.                           tsc.codsoc=dsk.codsoc
  125.                    AND tsc.achvte='A'
  126.                    AND tsc.codpro=dsk.codpro
  127.                    AND tsc.coddev=atar.coddev
  128.                    )
  129. AND rtar.codsoc(+)=dsk.codsoc
  130. AND rtar.achvte(+)='R'
  131. AND rtar.codpro(+)=dsk.codpro
  132. AND rtar.coddev(+)='EUR'
  133. AND nvl(rtar.datdeb, to_char(sysdate, 'YYYYMMDD'))=(SELECT
  134.                         nvl(max(tsc.datdeb),to_char(sysdate,'YYYYMMDD'))
  135.                    FROM
  136.                            tsc
  137.                    WHERE
  138.                           tsc.codsoc=dsk.codsoc
  139.                    AND tsc.achvte='R'
  140.                    AND tsc.codpro=dsk.codpro
  141.                    AND tsc.coddev='EUR')
  142. )
  143. WHERE codsoc = 2
  144. AND sfapro = 'TEXT'
  145. --and sigtie = 'NANDINI'
  146. AND sigdep IN ('DPT1', 'DPT6')
  147. ORDER BY sigtie, nomtie, libfam, codpro


 
Ou encore celle-là :p :

Code :
  1. SELECT mev.codsoc,
  2.        msk.codpro, pro.fampro, pro.sfapro, pro.ssfpro, pro.nompro,
  3.        msk.codosk, msk.achvte, msk.typeve, nvl(ret.typtie, ' '), nvl(ret.sigtie, ' '),
  4.        nvl(ret.refext, ' '), nvl(rettn.commen1, ' '), nvl(rettn.commen2, ' '), nvl(rettn.commen3, ' '), nvl(rettn.commen4, ' '),  
  5.        nvl(ent.sigdep, ' '), ' ', ' ', ' ', ' ',
  6.        msk.datmvt, ' ', ' ', ' ', ' ',
  7.        msk.numeve, decode(msk.codosk, 'ENTREE', msk.qteope, 'TRFENT', msk.qteope, 'INICPT', msk.qteope, 'INIT', msk.qteope, 'VREAVN', -1*msk.qteope, 0) "Entrées", decode(msk.codosk, 'TRFSOR', msk.qteope, 'VLIVVN', msk.qteope, 0) "Réparés", decode(msk.codosk, 'SORTIE', msk.qteope, 0) "Détruits", sum(faa.qtecde) afaa,
  8.        0, 0, 0, 0, 0,
  9.        msk.prxvte, msk.prxrev, tsc.prxtar, 0, 0,
  10.        0, 0, 0, 0, 0,  
  11.        0, 0, 0, 0, 0,  
  12.        0, 0, 0, 0, 0  
  13. FROM mev
  14. INNER JOIN msk ON msk.codsoc = fct_mev(mev.codsoc, 'MSK', ' ')
  15. INNER JOIN pro ON pro.codsoc = fct_mev(msk.codsoc, 'PRO', ' ') AND pro.codpro = msk.codpro
  16. INNER JOIN tsc ON tsc.codsoc = fct_mev(pro.codsoc, 'TSC', 'V') AND tsc.codpro = pro.codpro AND tsc.achvte = 'V'
  17. INNER JOIN evp faa ON faa.codsoc = fct_mev(msk.codsoc, 'EVP', ' ') AND faa.achvte = 'A' AND faa.typeve = 'FAA' AND faa.codpro = pro.codpro
  18. LEFT OUTER JOIN msk ent ON ent.codsoc = fct_mev(msk.codsoc, 'MSK', ' ') AND ent.codpro = msk.codpro AND ent.datmvt = msk.datmvt AND ent.heumvt = msk.heumvt AND ent.codosk = 'TRFENT' AND ent.sigdep != 'DPT3'
  19. LEFT OUTER JOIN eve ret ON ret.codsoc = fct_mev(msk.codsoc, 'EVE', ' ') AND ret.achvte = msk.achvte AND ret.typeve = msk.typeve AND ret.numeve = msk.numeve
  20. LEFT OUTER JOIN evp retp ON retp.codsoc = fct_mev(ret.codsoc, 'EVP', ' ') AND retp.achvte = ret.achvte AND retp.typeve = ret.typeve AND retp.numeve = ret.numeve AND retp.numpos = msk.poseve
  21. LEFT OUTER JOIN evt rettn ON rettn.codsoc = fct_mev(ret.codsoc, 'EVT', ' ') AND rettn.achvte = retp.achvte AND rettn.typeve = retp.typeve AND rettn.numeve = retp.numeve AND rettn.numpos = retp.numpos
  22. WHERE mev.codent = 'MEV'
  23. AND mev.segment = ' '  
  24. AND msk.sigdep = 'DPT3'
  25. AND msk.codosk IN ('SORTIE', 'ENTREE', 'TRFSOR', 'TRFENT', 'INICPT', 'INIT', 'VREAVN', 'VLIVVN')
  26. AND tsc.datdeb =
  27. (
  28.     SELECT max(datdeb)
  29.     FROM tsc tsc2
  30.     WHERE tsc2.codsoc = tsc.codsoc
  31.     AND tsc2.achvte = tsc.achvte
  32.     AND tsc2.codpro = tsc.codpro
  33.     AND tsc2.prxtar =
  34.     (
  35.          SELECT max(prxtar)
  36.         FROM tsc tsc3
  37.         WHERE tsc3.codsoc = tsc2.codsoc
  38.         AND tsc3.achvte = tsc2.achvte
  39.         AND tsc3.codpro = tsc2.codpro
  40.     )
  41. )
  42. GROUP BY mev.codsoc, msk.nummsk, msk.codpro,
  43.        pro.fampro, pro.sfapro, pro.ssfpro, pro.nompro,
  44.        msk.datmvt, msk.typosk, msk.codosk, msk.achvte, msk.typeve, msk.numeve, msk.qteope, msk.prxvte, msk.prxrev,
  45.        tsc.prxtar,
  46.        ret.typtie, ret.sigtie, ret.refext,
  47.        rettn.commen1, rettn.commen2, rettn.commen3, rettn.commen4,
  48.        ent.sigdep

Reply

Marsh Posté le 12-06-2007 à 11:55:13    

Pablo Escrobarbe a écrit :

Oui mais tu as compliqué inutilement je trouve :o


Nan, mes deux dernières requêtes sont relativement complexes, je te l'accorde (mais simples). Et dans mon exemple initial, non,j'ai rien compliqué du tout, c'est l'exemple typique : je cherche deux infos différentes depuis la même table à des lignes différentes, donc j'utilise un alias. C'est l'utilisation classique d'un alias.

Reply

Marsh Posté le 12-06-2007 à 12:27:19    

Oui oui en fait j'avais lu trop vite, j'ai hésité à m'éditer vite fait mais j'ai eu l'honnêteté de garder ma connerie :)

Reply

Marsh Posté le 12-06-2007 à 13:33:24    

non mais que les alias soient utiles on est tous d'accord, c'est pas la question.
Le problème c'est l'exemple donnée dans le premier post qui est complètement ridicule
 
je rappelle :
 
select champ1, champ2  
from table1 a, table1 b
where champ4 = 'toto'
and a.id = b.id
 
Cette requête n'est pas valide et ne ressemble à rien.  
Avec un cas concret de la part de l'auteur de ce topic on pourrait peut être donner une réponse valable.  
Mais tant que je ne sais pas ce qu'il veut....

Reply

Marsh Posté le 12-06-2007 à 14:25:27    

ah ben le premier, oui. et c'est pour ça que j'ai parlé de pets de cul arrachés, parceque non seulement c'est débile, mais en plus ça marche pas :o

Reply

Marsh Posté le 15-06-2007 à 01:26:02    

Pour la question du monsieur qui as poster le premier post,
je croie (du moin en lisant le titre du topique) qu'il parle de cas où on selectionne 2 fois un meme champ dans la meme table, par exemple:
 
On a une table:
Film( titre, duree, nationalité, realisateur )
 
on veut par exemple trouver quels sont les titres des films réalisés par le realisateur de "Waterworld"
 
On fesant l'analyse en langage prédicatif on as un truc du genre:
{ f1.titre / Film(f1)  &  IL_EXISTE f2 ( Film(f2) & f2.titre='Waterworl' & f2.realisateur=f1.realisateur ) }
 
On as utilisé un meme champ 2 fois from la meme table avec une condition f2.realisateur=f1.realisateur
 
Ce qui donne en SQL:
 

Citation :

Select titre
from film
where realisateur  IN
(Select realisateur from film where titre='Waterworld')


Ou d'une autre magnére:

Citation :

Select  f1.titre
from  film f1, film f2
where  f2.titre='Waterworld'   AND   f2.realisateur=f1.realisateur


 
Ce qui est -je trouve- proche de l'exemple qui a été donnée dans le premier post:
 

Citation :

select champ1, champ2  
from table1 a, table1 b
where champ4 = 'toto'
and a.id = b.id;


 

Reply

Marsh Posté le 15-06-2007 à 09:27:19    

ouais, mais comme je disais "champ1", "champ2" et "champ4" doivent obligatoirement être préfixés si on veut que ça requête marche :p
 
et généralement, on évite de joindre une table sur elle-même via sa clé primaire (id) puisque... bah ça sert à rien :D

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed