具有重复值的JOIN上的UPDATE表仅返回第一个值

时间:2013-08-09 14:07:16

标签: mysql sql

当我尝试将值从一个表导入另一个表时,我没有得到所有结果。示例,请参阅下面的代码,我要求:

JOIN transaction ON transaction.invoice = invoicing.invoice

有时,我有2或3张发票具有相同的发票编号,而更新仅发生在第一个发票编号上,跳过其他具有相同发票编号的发票。

我需要所有发票,包括重复发票。

UPDATE invoicing
JOIN transaction ON transaction.invoice = invoicing.invoice
SET invoicing.raison = transaction.transaction, invoicing.description = 
transaction.description, invoicing.voyage_passenger = transaction.voyage_passenger

我错过了什么?

修改

表格交易:

|num    |date           |invoice    |type   |transaction    |amount   |description  
|886051 |1375381803     |859532     |A      |carte          |7.00     |bla bla desc1
|886052 |1375381809     |859532     |P      |repro          |0.00     |bla bla desc2

表发票 - 比上面的表格多了大约8列,下面没有提到。 同样,我只需要将上面第2行中的信息也包含在新行中的下表中。我现在也意识到我需要一个INSERT而不是UPDATE来插入这些重复的行。

|num    |date           |invoice    |type   |raison |amount   |description   |clientID
|951100 |1375381803     |859532     |A      |carte  |7.00     |bla bla desc1 |121212
|951101 |1375401111     |859533     |A      |carte  |7.00     |bla different |222444

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

不知道如何处理ClientId。根据您的样本数据,发票可以在不同的日期,因此我不确定ClientId对于不同的日期发票是否相同。

insert into invoicing (`num`, `date`, `invoice`, `type`, 
                       `raison`, `amount`, `description`)
select `num`, `date`, `invoice`, `type`, `transaction`, `amount`, `description`
from Transaction t
where not exists
( select `num` from invoicing i
  where 
       i.`num`=t.`num`
   and i.`date`=t.`date`
   and i.`invoice`=t.`invoice`
   and i.`type`=t.`type` 
   and i.`raison`=t.`transaction` 
   and i.`amount`=t.`amount`  
   and i.`description`=t.`description`  

 )

SQLFiddle demo

答案 1 :(得分:0)

连接中第一个表中的发票号可能在第二个表中不存在。为什么不是LEFT JOIN?