【问题标题】:UPDATE with INNER JOIN使用 INNER JOIN 更新
【发布时间】:2014-11-30 20:55:05
【问题描述】:

我正在使用 JavaDB 并处理同一数据库中的两个表。

当 Vehicle 表的 SellDate 早于指定日期时,我正在尝试使用“Vehicles”表的“SellDate”列中的值更新“SalesResp”表中的 PrevSales 列。我通过使用两个表中都存在的“VIN”列来匹配两个表之间的数据。

我的代码中的内部联接不断出现错误,SQL 状态 42x01。

UPDATE SALESRESP JOIN VEHICLES ON (SALESRESP.VIN = VEHICLES.VIN) 
SET SALESRESP.PrevSale = VEHICLES.SELLDATE WHERE 
(((VEHICLES.SELLDATE)<'2013-09-24'));

我尝试了各种配置,交换了 INNER JOIN 和 SET 放置,我尝试了包含“FROM”子句。似乎没有任何效果。有什么建议吗?

编辑:确切的错误代码:

Error code 30000, SQL state 42X01: Syntax error: Encountered "JOIN" at line 1, column 19.

【问题讨论】:

  • 请显示您遇到的错误。另外,我认为您不必使用 INNER,Join 应该就足够了。
  • 已编辑。也试过不加“INNER”,还是对“JOIN”这个词的存在大惊小怪。

标签: sql sql-update inner-join javadb


【解决方案1】:

使用以下代码并查看,替换您的日期而不是 sysdate。

UPDATE SALESRESP  
SET SALESRESP.PrevSale  = (SELECT VEHICLES.SELLDATE FROM VEHICLES 
WHERE SALESRESP.VIN = VEHICLES.VIN  AND
VEHICLES.SELLDATE <'2013-09-24');

【讨论】:

  • 不需要加入吗?我以为在处理两张不同的桌子时需要一张?编辑:试了一下,又出现错误:错误代码 30000,SQL 状态 42X01:语法错误:在第 1 行第 61 列遇到“FROM”。
  • join关键字真的没必要。有一些方法可以使用 where 语句中的条件来模拟连接。上面的代码对你有用吗?
  • 啊,好的,很高兴了解联接。但它仍然不适合我。相同的错误代码,只是这次是“FROM”错误代码 30000,SQL 状态 42X01:语法错误:在第 1 行第 61 列遇到“FROM”。
  • 我像您推荐的那样添加了一个选择,它可以工作,但没有获取正确的日期。这么近,但还没有雪茄:\
  • 我今天重置了连接,这最终成功了!感谢您的帮助!
【解决方案2】:

好的,让我们尝试更明确一点:

UPDATE SALESRESP SET SALESRESP.PrevSale = VEHICLES.SELLDATE FROM VEHICLES JOIN SALESREP ON (SALESRESP.VIN = VEHICLES.VIN) WHERE (((VEHICLES.SELLDATE)<'2013-09-24'))

看看这是否可行。

【讨论】:

  • 它给了我错误:“错误代码 30000,SQL 状态 42X03:列名 'VEHICLES.SELLDATE' 在 FROM 列表中的多个表中。”我尝试添加更多 () 以尝试将其分离出来,但它也不喜欢那样。
  • 抱歉忘记更改 JOIN 参考请参阅上面的更改。
  • 它仍在继续关于“vehicles.selldate”是多张表中的一列。但是感谢您的帮助!
【解决方案3】:
UPDATE S SET S.PrevSale = V.SELLDATE FROM SALESRESP S 
inner join  VEHICLES V on S.VIN = V.VIN AND V.SELLDATE < '2013-09-24'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-07
    • 2013-01-07
    • 2021-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-27
    相关资源
    最近更新 更多