Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何在交叉引用其他表时更新记录?_Sql_Sql Server_Join - Fatal编程技术网

Sql 如何在交叉引用其他表时更新记录?

Sql 如何在交叉引用其他表时更新记录?,sql,sql-server,join,Sql,Sql Server,Join,如果标题没有准确描述问题(可能没有),则表示歉意。我有以下两个表格:- tLiveTable: PieceID LocationRef ------------------------ 100 5 TPiectable: ID BatchNo PieceNumber ------------------------------ 50 ABC X1 100 ABC X1 仅给定BatchNo和Pi

如果标题没有准确描述问题(可能没有),则表示歉意。我有以下两个表格:-

tLiveTable:

PieceID      LocationRef
------------------------
100              5
TPiectable:

ID    BatchNo      PieceNumber
------------------------------
50    ABC          X1
100   ABC          X1
仅给定BatchNo和PieceNo,如何更新tLiveTable中该工件的LocationRef

我尝试了以下方法:

UPDATE tLiveTable
SET LocationRef = 'blabla unimportant'
WHERE
PieceID = (SELECT ID FROM tPieceTable WHERE (BatchNo = 'ABC') AND (PieceNo = 'X1'))
但tPieceTable中可能有多个条目具有相同的BatchNo和PieceNo。我只想从tPieceTable中检索ID,其ID当前为tLiveTable中的ID

我真的应该为此使用内部联接吗?

您的查询将无法运行,因为
从tpiectable中选择ID,其中(BatchNo='ABC')和(PieceNo='X1')
返回多个ID

试试这个

UPDATE L SET LocationRef = 'blabla unimportant'
FROM tLiveTable L JOIN tPieceTable P 
     ON L.PieceID = P.ID
WHERE (P.BatchNo = 'ABC') AND (P.PieceNo = 'X1')
或在中为=

UPDATE tLiveTable
SET LocationRef = 'blabla unimportant'
WHERE
PieceID IN (SELECT ID FROM tPieceTable WHERE (BatchNo = 'ABC') AND (PieceNo = 'X1'))