我有两个表communication
(包含列timestamp
,FromIDNumber
和FromX
)和commLocation
(有一列{{1} },timestamp
和FromIDNumber
)。
当两张表具有相同的x
和communication.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
的某一行。 ..我该怎么办?
任何帮助将不胜感激,谢谢!
答案 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
子句。