SQL更新Table困惑?
SQL Update Table confusion?
我有两个 table,communication
(其中有一列 timestamp
、FromIDNumber
和 FromX
)和 commLocation
(有一列 timestamp
、FromIDNumber
和 x
)。
当两个table的timestamp
和FromIDNumber
相同时,我想设置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
子句。
我有两个 table,communication
(其中有一列 timestamp
、FromIDNumber
和 FromX
)和 commLocation
(有一列 timestamp
、FromIDNumber
和 x
)。
当两个table的timestamp
和FromIDNumber
相同时,我想设置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
子句。