2014-09-01 1 views
0

Nouveau à JOIN, et j'ai regardé beaucoup de réponses ici sur stackoverflow ... Je pense que je vais à ce sujet dans le mauvais sens - toute aide très appréciée!MySql - INNER JOIN sur deux tables - résultats en double

J'ai deux tables, je veux me joindre à partir de deux bases de données différentes:

base de données : Ered
table: 14jan

dev    datepicker 
-------------------------- 
Ananda   2014-02-01 
Anita   2014-02-01 
Syamasundari 2014-02-01 
Ananda   2014-03-04 
Anita   2014-03-04 
Syamasundari 2014-03-04 
Ananda   2014-05-06 
Anita   2014-05-06 
Syamasundari 2014-05-06 

base de données : calpaid
tableau: bookings_items

id  desc_en 
--------------- 
149  Ananda 
250  Anita 
427  Syamasundari 

Les résultats que je ne like..and attendus:

tableau: réservations (id est auto-incrémentée)

id id_item  the_date id_state id_booking 
-------------------------------------------------- 
1 149   2014-02-01 ok   ok 
2 149   2014-03-04 ok   ok 
3 149   2014-05-06 ok   ok 
4 250   2014-02-01 ok   ok 
5 250   2014-03-04 ok   ok 
6 250   2014-05-06 ok   ok 
7 427   2014-02-01 ok   ok 
8 427   2014-03-04 ok   ok 
9 427   2014-05-06 ok   ok 

La requête J'utilise une double déclaration des résultats:

QUERY

INSERT INTO calpaid.bookings (id,id_item,the_date,id_state,id_booking) 
SELECT '$id', b.id, e.datepicker, '$id_state', '$id_booking' 
FROM ered.14jan e 
INNER JOIN 
    calpaid.bookings_items b 
    ON e.dev = b.desc_en 

Est-ce que je vais dans le mauvais sens? J'ai expérimenté un peu avec GROUP et DISTINCT, mais sans chance.

Merci Chaitanya

+5

Ce ne sont pas reproduire les résultats. Regardez les colonnes date et id et vous verrez qu'elles sont différentes. –

+0

Si vous avez remarqué cela (et ce n'est pas ce que vous voulez), alors y a-t-il quelque chose d'autre qui nous manque ou que vous voulez changer? – jbutler483

+0

Merci Gordon, en quelque sorte le poste ne montre pas que les numéros auto-incrémentés 1-9 ... Je vais essayer d'éditer maintenant –

Répondre

0

Si je ne me trompe pas la chose que vous voulez ceci:

INSERT INTO calpaid.bookings (id,id_item,the_date,id_state,id_booking) 
SELECT '$id', b.id, e.datepicker, '$id_state', '$id_booking' 
FROM ered.14jan e 
INNER JOIN 
    calpaid.bookings_items b 
    ON e.dev = b.desc_en 
group by id_item 
+0

renvoie ce message: Erreur lors de l'ajout de données dans la base de données: Colonne inconnue 'id_item' dans 'instruction group' –

0

Vous ne sorte de va à son sujet dans le mauvais sens. Ce que vous voulez sans doute est:

INSERT INTO calpaid.bookings(id_item, the_date, id_state, id_booking) 
    SELECT b.id, e.datepicker, '$id_state', '$id_booking' 
    FROM ered.14jan e INNER JOIN 
     calpaid.bookings_items b 
     ON e.dev = b.desc_en ; 

Cela réserve id de la insert tous ensemble. Cela suppose que calpaid.bookings(id) est auto-incrémenté. Si ce n'est pas le cas, vous devez concevoir la table de sorte que l'ID soit une clé primaire auto-incrémentée. Ensuite, lorsque vous insérez une valeur dans le champ, elle s'incrémente automatiquement.

Si cela ne vous convient pas pour une raison quelconque, vous pouvez utiliser une variable à la place:

INSERT INTO calpaid.bookings(id, id_item, the_date, id_state, id_booking) 
    SELECT (@rn := @rn + 1), b.id, e.datepicker, '$id_state', '$id_booking' 
    FROM ered.14jan e INNER JOIN 
     calpaid.bookings_items b 
     ON e.dev = b.desc_en CROSS JOIN 
     (SELECT @rn := 0) vars 
+0

Merci Gordon , id est déjà une clé primaire auto-incrémentée. essayé votre suggestion ci-dessus ... obtenir un ensemble de lignes auto-incrémentées 1-9, c'est bien, mais ensuite les lignes sont répétées à nouveau avec auto-increments de 10-18 –

+0

@CaitanyaCandradas. . . C'est un comportement correct. Que voulez-vous que la requête fasse? –

+0

Le problème est que les résultats sont les suivants: 'id id_item the_date id_state id_booking 8 427 04.03.2014 ok ok 9 427 06.05.2014 ok ok ... 17 427 2014-03 -04 ok ok 18 427 2014-05-06 ok ok ' –