SQL Update表混乱?

时间:2015-06-17 20:27:04

标签: mysql sql sql-update

我有两个表communication(包含列timestampFromIDNumberFromX)和commLocation(有一列{{1} },timestampFromIDNumber)。

当两张表具有相同的xcommunication.FromX = commLocation.x时,我想设置timestamp

我试过这样做:

FromIDNumber

但我收到了一个错误:

UPDATE communication
SET FromX=(SELECT commLocation.x
           FROM commLocation 
           JOIN communication
           ON communication.Timestamp=commLocation.timestamp
           WHERE communication.FromIDNumber=commLocation.FromIDNumber);

我将如何做到这一点?这是 SQL Fiddle 。现在,我在表格末尾插入You can't specify target table 'communication' for update in FROM clause 值,但我不想这样,因为我需要它来对应FromX的某一行。 ..我该怎么办?

任何帮助将不胜感激,谢谢!

1 个答案:

答案 0 :(得分:1)

您可以在UPDATE语句中执行JOIN操作。

例如:

  UPDATE communication c
    JOIN commLocation l
      ON l.timestamp    = c.timestamp
     AND l.fromidnumber = c.fromidnumber
     SET c.fromx = l.x

这假设(timestamp,fromidnumber)commLocation是唯一的。

为了开发这样的查询,我们通常以SELECT语句开始...

  SELECT c.timestamp 
       , c.fromidnumber
       , c.fromx        AS old_fromx
       , l.x            AS new_fromx
    FROM communication c
    JOIN commLocation l
      ON l.timestamp    = c.timestamp
     AND l.fromidnumber = c.fromidnumber

SELECT中的new_fromx是我们要分配给列的表达式/值。我们可以在SELECT列表中返回其他列,以验证语句是否正在执行我们希望它执行的操作。

一旦我们开始工作,我们会将其转换为更新,方法是删除SELECT ... FROM并将其替换为UPDATE。并在SET子句之前添加WHERE子句。