我想加入一个表到另一个,但是当没有匹配时,我想使用特定的字符串值匹配,而不是我知道会有匹配值。表连接时没有匹配,然后使用定义的字符串
例如,如果我用借这个结构
declare @A table (id int identity(1,1), category varchar(4))
declare @B table (category varchar(4), name varchar(10))
insert @A values ('AB')
insert @A values ('AB')
insert @A values ('AB')
insert @A values ('AB')
insert @A values ('AC')
insert @A values ('AD')
insert @B values ('AB', 'Fred')
insert @B values ('AC', 'Bob')
insert @B values ('else', 'Jane')
insert @B values ('else', 'Mary')
一个简单连接:
select a.id, a.category, b.category, b.name
from @A a
inner join @B b on a.category = b.category
然后第5条记录将匹配,我会结束:
1 AB AB Fred
2 AB AB Fred
3 AB AB Fred
4 AB AB Fred
5 AC AC Bob
但是,我想要做的是为最后一个没有匹配记录的记录我想替换c在“其他”,使其匹配表@B两个记录和表@A ategory“AD”回来为:
1 AB AB Fred
2 AB AB Fred
3 AB AB Fred
4 AB AB Fred
5 AC AC Bob
6 else else Jane
6 else else Mary
UPDATE:
也可能有场合表@A不包含匹配记录,所以我不认为可以使用RIGHT JOIN,因为我不想从@B获取所有记录。例如,如果@A没有足够的“AC”的记录,只是包含:
insert @A values ('AB')
insert @A values ('AB')
insert @A values ('AB')
insert @A values ('AB')
insert @A values ('AB')
insert @A values ('AD')
那么输出将是:
1 AB AB Fred
2 AB AB Fred
3 AB AB Fred
4 AB AB Fred
5 AB AB Fred
6 else else Jane
6 else else Mary
什么会的各种选项是返回正确的数据?
为什么不在''B'表中'RIGHT JOIN',然后在'SELECT'语句中使用'ISNULL()'来显示'else'。我不太确定你在这里做什么。你也可以在你的连接语句中使用两个连接条件,比如'JOIN ON category = category OR IF NOT EXISTS ...' – EMUEVIL
我不认为我可以正确连接,因为我不想要所有记录从@B(查看更新) – ca8msm
那么,你是否希望它从B返回匹配A的所有内容以及B中包含'else'的所有内容? Bob如何用“AB”返回? –