Page 1 sur 1

Comparer deux tables

Posté : 08 juil. 2005, 15:18
par demetan
Bonjour, Voici mon probleme. J'ai deux tables : table_A et table_B reprenant des articles numerotés sous "ID". la TABLE_B reprend simplement une liste ID avec en deuxieme colonne un 0 ou un 1 pour savoir si l'article est nouveau ou pas.
J'aimerai prendre tous les elements de la TABLE_A qui sont présents dans la TABLE_B et nouveau.

J'ai essayé cette commande ci :

SELECT id, nom, details FROM table_A WHERE id IN (SELECT id FROM table_B where nouveaute = '1') ORDER BY nom

Elle ne marche pas !

Quand je fais simplement

SELECT id, nom, details FROM table_A ORDER BY nom

Ca marche. Donc l'erreur devrait se trouver dans le

SELECT id FROM table_B where nouveaute= '1'

Mais je ne vois pas ou.

Je precise que je suis "sous" MySql 4.0.20a et donc les sous requetes devraient fonctionner.

Merci pour votre aide.

[EDIT : J'avais mis "where nouveaute= '2' " au lieu de where "nouveaute= '1' ", le probleme est toujours le meme]

Posté : 08 juil. 2005, 15:38
par zeus
Avec ta version de MySQL, tu peut utiliser IN , mais pas les sous-requêtes

Si tu veux faire un équivalent, il faut que tu fasses ta 1ere requete, que tu construise la liste des résultats et que tu passes cette liste dans le IN
$str_requete = "SELECT id FROM table_B where nouveaute = '1'";
//execution requete

$a_tab = array();
while($a_result = mysql_fetch_array(RESULTAT_REQUETE)) {
  array_push($a_tab, $a_result["id"]);
}

$str_liste = implode(",", $a_tab);

$str_requete = "SELECT id, nom, details FROM table_A WHERE id IN (".$str_requete.") ORDER BY nom";

Posté : 08 juil. 2005, 15:43
par demetan
merci ,

Oui je viens de voir que les subselect c'est a partir de 4.1.

Je vais essayer ce que tu proposes.

Posté : 08 juil. 2005, 15:45
par pjl
Une jointure serait amplement suffisante pour résoudre ton PB.

Posté : 08 juil. 2005, 16:31
par demetan
Effectivement
avec un join inner ca marche :

SELECT A.id, A.nom, A.details FROM table_A A INNER JOIN table_B B ON A.id = B.id WHERE B.nouveaute = '1' ORDER BY nom


MERCI !!!!!!!!!!!!!!!!!!!!