2014-09-01 3 views
0

Новое, чтобы присоединиться к нам, и посмотрел много ответов здесь, на stackoverflow ... Я думаю, что я собираюсь сделать это неправильно - любая помощь очень ценится!MySql - INNER JOIN на двух таблицах - дублирующиеся результаты

У меня есть две таблицы, я хочу присоединиться из двух различных баз данных:

базе: ERed
стол: 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 

базы данных: calpaid
стол: bookings_items

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

Результаты, которые я бы like..and ожидал:

стол: заказы (идентификатор автоинкрементных)

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 

Запрос Я использую возвращает продублировать результаты:

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 

Я иду об этом не так? Я немного экспериментировал с GROUP, а также DISTINCT, но не повезло.

Благодаря Чайтаньи

+5

Те не дублировать результаты. Посмотрите на столбцы даты и идентификатора, и вы увидите, что они разные. –

+0

, если вы заметили это (и это не то, что нужно), то есть ли что-то еще, что нам не хватает, или вы хотите изменить его? – jbutler483

+0

Спасибо, Гордон, почему-то сообщение не показывает, что автоинкрементные числа 1-9 ... Я попробую отредактировать это сейчас –

ответ

0

Если я правильно вещь вы хотите:

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

возвращает это сообщение: Ошибка добавления данных в базу данных: Неизвестный столбец 'id_item' в 'group statement' –

0

Вы только вид идти об этом неправильный путь. То, что вы, вероятно, хотите есть:

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 ; 

То есть, оставить id из insert все вместе. Это предполагает, что calpaid.bookings(id) автоматически увеличивается. Если это не так, вы должны создать таблицу так, чтобы идентификатор был автоматически сгенерированным первичным ключом. Затем, когда вы вставляете значение в поле, оно автоматически увеличивается.

Если это не устраивает по каким-то причинам, вы можете использовать переменную:

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

Thanks Gordon , id уже является автоматически инкретированным первичным ключом. попробовал ваше предложение выше ... получить набор строк auto-incrementd 1-9, thats fine, , но затем строки повторяются снова с автоинкрементами от 10-18 –

+0

@CaitanyaCandradas. , , Это правильное поведение. Что вы хотите, чтобы запрос выполнялся? –

+0

Проблема заключается в том, что результаты выглядят следующим образом: 'ID id_item the_date id_state id_booking 8 427 2014-03-04 ок ок 9 427 2014-05-06 ок ок ... 17 427 2014-03 -04 ok ok 18 427 2014-05-06 ok ok ' –