【发布时间】:2017-04-06 03:21:11
【问题描述】:
我需要在两个表之间进行左连接。 TableA 是事务表,而 TableB 包含参考数据。我加入的逻辑规则如下:
SELECT *
FROM
TableA a
LEFT JOIN TableB b
ON a.ItemCode = b.ItemCode
AND a.ItemType = b.ItemType
AND b.FundID = 1 (but if no match found use b.FundID = 99)
最后一个连接条件,括号中的部分,是我遇到的问题。
编辑:一些澄清 - 如果在 ItemCode 和 ItemType 和 FundID = 1 上找不到匹配项,那么我想加入 ItemCode 和 ItemType 和 FundID = 99。此外,TableB 可能有两条记录在ItemCode 和ItemType 上都匹配,一条记录具有FundID = 1,第二条记录具有FundID = 2。在那种情况下,我只想要FundID = 1 的记录。
编写此查询的最有效方法是什么?
我唯一能想到的就是执行两次查询,一次是 FundID = 1,然后是 FundID = 99。然后使用集合运算符返回第一个查询的所有记录,只返回第二个查询的记录第一个中不存在的查询。代码不会很漂亮,而且看起来效率也不高。
提前感谢您的想法。
马吕斯
【问题讨论】:
-
添加一列以创建
Row_Number()分区ItemType和ItemCode并按FundId排序,然后仅使用行号为1的结果? -
在使用
b.FundID = 99时,还需要ItemCode&Itemtype上的条件吗? -
@Squirrel 是的,当使用
b.FundID = 99时,我仍然需要ItemCode和ItemType上的条件 -
@Marius 那么TriV给出的答案应该可以,这也意味着您问题中的语言不清楚。
-
使用
b.fundID IN (1, 99)
标签: sql sql-server tsql join