SQL Query with join不更新列值

时间:2016-01-18 17:51:40

标签: sql sql-server

enter image description here

我正在尝试通过比较awsi-client.jar并查看它是否在eod_master的transactionstran_num之间同时拥有start_tran_num来更新我的end_tran_num表格{1}}列值相同。

clinic

这是我试图运行的脚本,但它不会更新任何值。查询无休止地运行,没有任何更新。运行以下查询会显示我期望的结果,但似乎无法适应UPDATE查询。

UPDATE transactions
SET time_ran=e.time_ran
FROM transactions t
INNER JOIN eod_master e
ON e.clinic=t.clinic
WHERE (t.tran_num BETWEEN e.start_tran_num AND e.end_tran_num)

有什么想法吗?

2 个答案:

答案 0 :(得分:3)

您需要使用update的表别名:

UPDATE t
-------^
    SET time_ran=e.time_ran
FROM transactions t INNER JOIN
     eod_master e
     ON e.clinic = t.clinic AND
        (t.tran_num BETWEEN e.start_tran_num AND e.end_tran_num);

它无休止地运行,因为存在隐式cross join。如果你没有杀死查询,那么它会更新transactions中的所有行,并且有一些价值。

答案 1 :(得分:0)

你说它无休止地运行,这是否意味着你永远不会让它完成?

UPDATE transactions
SET time_ran=e.time_ran
FROM transactions t
INNER JOIN eod_master e
ON e.clinic=t.clinic
WHERE (t.tran_num BETWEEN e.start_tran_num AND e.end_tran_num)

此查询将更新Transactions中的每条记录。这不太可能是你想要做的,也可能是为什么更新无休止地继续下去。

UPDATE t
SET time_ran=e.time_ran
FROM transactions t
INNER JOIN eod_master e
ON e.clinic=t.clinic
WHERE (t.tran_num BETWEEN e.start_tran_num AND e.end_tran_num)
and t.time_ran<>e.time_ran or (t.time_ran is not and e.time_ran) is not null

这只会更新需要更新的记录。那可能是你的问题。