【发布时间】:2018-07-03 08:24:21
【问题描述】:
问题可能很简单,但我对 SQL 还很陌生,所以就这样吧。
我想要完成的事情:
我有TableA 和TableB。 TableA 包含我的大部分数据,但是如果 ID 和日期范围匹配,它应该使用来自 TableB 的数据修改其中一列(修改后的结果)。
这是我的查询:
SELECT
t1.ID, t1.a, t1.b, t1.c, t1.d, t1.e, t1.f, t1.g, t1.h, t1.i,
(t1.totalcost - (ISNULL(t2.cost, 0) * ISNULL(t2.qty,0))) AS modified_result,
t1.j, t1.k, t1.createdate
FROM
TableA as t1
LEFT JOIN
TableB AS t2 ON t1.ID = t2.ID
WHERE
t1.createdate BETWEEN '2018-06-19' AND '2018-06-23'
AND t2.createdate BETWEEN '2018-06-19' AND '2018-06-23'
AND t2.trans_type = 'H'
ORDER BY
t1.createdate
TableA 中大约有 2000 多条记录满足 TableA 的这些条件,而 TableB 中只有少数匹配记录。运行此查询会产生与 TableB 结果相同的行号,这对我来说看起来像是一个内部联接。
我的WHERE 部分可能有误,但我看不到。
【问题讨论】:
-
永远不要在 where 子句中使用左连接表,否则会变成内连接
-
所有应用于 T2 的限制都必须在外连接的 ON 子句中。
-
@JaydipJadhav 不知道,谢谢!
标签: sql sql-server-2008 tsql