我有一个带account numbers和的数据库card numbers.我将这些文件与update任何卡号匹配到帐号,以便我只使用帐号.
我创建了一个视图链接表和帐户/卡数据库以返回Table ID相关的帐号,现在我需要更新ID与帐号匹配的记录.
这是Sales_Import表,account number需要更新字段:
LeadID AccountNumber
147 5807811235
150 5807811326
185 7006100100007267039
Run Code Online (Sandbox Code Playgroud)
这是RetrieveAccountNumber表,我需要更新:
LeadID AccountNumber
147 7006100100007266957
150 7006100100007267039
Run Code Online (Sandbox Code Playgroud)
我试过以下,但到目前为止没有运气:
UPDATE [Sales_Lead].[dbo].[Sales_Import]
SET [AccountNumber] = (SELECT RetrieveAccountNumber.AccountNumber
FROM RetrieveAccountNumber
WHERE [Sales_Lead].[dbo].[Sales_Import]. LeadID =
RetrieveAccountNumber.LeadID)
Run Code Online (Sandbox Code Playgroud)
它将卡号更新为帐号,但帐号被替换为 NULL
我希望这是有道理的,让我详细说明:
有一个测验程序跟踪数据表,其中每一行都有...
QuestionID和AnswerID(每个都有一个表).因此,由于一个错误,有一堆QuestionID设置为NULL,但相关AnswerID的QuestionID在Answers表中.
所以说QuestionID是NULL,AnswerID是500,如果我们转到Answers表并找到AnswerID 500,那么有一个带有QuestionID的列应该是NULL值所在的列.
所以基本上我想将每个NULL QuestionID设置为等于在跟踪表中的AnswerID的Answer行上的Answers表中找到的QuestionID(与正在写入的NULL QuestionID相同的行).
我该怎么做?
UPDATE QuestionTrackings
SET QuestionID = (need some select query that will get the QuestionID from the AnswerID in this row)
WHERE QuestionID is NULL AND ... ?
Run Code Online (Sandbox Code Playgroud)
不知道我怎么能够从匹配的AnswerID中将QuestionID分配给QuestionID ...
所以我试图通过运行以下代码来更新我的模型:
FooBar.objects.filter(something=True).update(foobar=F('foo__bar'))
Run Code Online (Sandbox Code Playgroud)
但是我收到以下错误:
FieldError: Joined field references are not permitted in this query
Run Code Online (Sandbox Code Playgroud)
如果F表达式不允许这样做...我怎样才能实现此更新?
鉴于这张票中的信息,我现在明白这是不可能的,永远不会在django中实现,但有没有办法实现这个更新?也许有一些解决方法?我不想使用循环,因为有超过1000万个FooBar对象,所以SQL比python快得多.
我有以下查询工作正常
SELECT RecordID, ROW_NUMBER() OVER (ORDER BY (Value1) DESC) AS Rank
FROM Table1
Run Code Online (Sandbox Code Playgroud)
另外,我有另一个表(table2),其中包含(其中包括)RecordID和Rank字段.我想根据上面的查询结果更新table2中的RecordID和Rank.那可能吗?