我正在尝试在我的数据库中实际发生交易时建立一个日期,因为系统按交易ID使用了跟踪而不是日期。以下查询是我尝试过的,已经运行但未更新任何值的查询:
Static hostname: xxxx
Icon name: computer-laptop
Chassis: laptop
Boot ID: b3a1f952c514411c8c4xxxxxxxxxxxx
Operating System: Ubuntu 14.04.3 LTS
Kernel: Linux 3.19.0-43-generic
Architecture: x86_64
我已经测试了以下查询,以确保我正在寻找的值是正确的,没有任何问题:
UPDATE dbo.transactions
SET t.time_ran=e.time_ran
FROM transactions t
CROSS JOIN eod_master e
WHERE(t.clinic=e.clinic) AND (t.tran_num BETWEEN e.start_tran_num AND e.end_tran_num)
由于没有任何错误,我不确定为什么没有更新这些值。我的SELECT t.tran_num, t.clinic, e.time_ran, t.date_entered, t.clinic
FROM transactions t
CROSS JOIN eod_master e
WHERE(t.clinic=e.clinic) AND (t.tran_num BETWEEN e.start_tran_num AND e.end_tran_num)
抛出一个错误t.time_ran
时遇到了错误但我在测试时通过删除该表的别名来解决它。
更新:
只是为了澄清表格的设置方式。我有35个不同的The multi-part identifier "t.time_ran" could not be bound.
值,每个商家每天都有clinic
和start_tran_num
。 end_tran_num
是一天结束时的time_ran
。 IE的开始和结束声明不会重叠,IE:第一天从1开始,到200结束,第二天自动从201开始,等等。
以下是数据结果的模拟示例。我在所有提供的见解之后尝试了以下代码而没有任何更改。 datetime
列中没有NULL值,当前所有eod_master.time_ran
都为空,因此查询不应尝试放入已存在的相同值。
transations.time_ran
答案 0 :(得分:1)
你可以尝试在UPDATE语句中使用Alias,所以:
UPDATE
t
SET
t.time_ran=e.time_ran
FROM
transactions t
INNER JOIN eod_master e ON
t.clinic=e.clinic
WHERE
t.tran_num BETWEEN e.start_tran_num AND e.end_tran_num;
UPDATING加入时我遇到了类似的问题。
答案 1 :(得分:0)
交叉连接(可以)为每一行返回多个结果;您无法更新以将其设置为等于1个以上的值,因此您需要使用常规连接,而不是交叉连接。鉴于您使用范围执行此操作,您可能需要使用子查询来查找匹配的单个事务,并从中进行更新。