MySql - 两个表上的INNER JOIN - 重复结果

时间:2014-09-01 12:19:19

标签: mysql inner-join duplicate-data

JOIN的新手,并且已经在stackoverflow上查看了很多答案...我想我会以错误的方式解决这个问题 - 任何帮助都非常感谢!

我想从两个不同的数据库加入两个表:

数据库: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

我想要的结果......并期待:

表:预订(ID自动递增)

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进行了一些实验,但没有运气。

由于 采塔尼亚

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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)是自动递增的。如果不是,则应设计表,以便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