SQL更新Table困惑?

SQL Update Table confusion?

我有两个 table,communication(其中有一列 timestampFromIDNumberFromX)和 commLocation(有一列 timestampFromIDNumberx)。

当两个table的timestampFromIDNumber相同时,我想设置communication.FromX = commLocation.x

我试过这样做:

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

但是我得到一个错误:

You can't specify target table 'communication' for update in FROM clause 

我将如何做到这一点?这是它的SQL Fiddle。现在,我在 table 的末尾插入 FromX 值,但我不想这样做,因为我需要它对应于 communication 的某一行。 .. 我该怎么做?

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

您可以在 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 是我们要分配给列的 expression/value。我们可以 return 在 SELECT 列表中添加其他列,以验证该语句是否在执行我们希望它执行的操作。

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