2016-04-28 90 views
0

给你这里的上下文是我的数据库模式。TSQL反向LIKE语句

水果表

Id  Name 
1  Gala Apples 
2  Navel Oranges 
3  Peach 
4  Mandarin Oranges 
5  Kiwi 
6  Fuji Apples 

相交表:

FruitId  CrossRefFruitId 
    1    6 
    2    4 

所以我的交叉表中有水果的值。

1 (Gala Apples) are related to 6 (Fuji Apples) 
2 (Navel Oranges) are related to 4 (Mandarin Oranges) 

在UI中说用户正在查看关于Gala Apples的详细信息。我希望能够有一个“另见:富士苹果”。

现在我被告知,我不希望有反向输入,所以1,6是好的,但有6,1是有意义的,这是浪费。

所以我试图写一个TSQL检查,将确定如果1,6或6,1存在。

最终,这将进入一个INSERT触发器,该触发器将检查传入行以查看组合是否存在,然后允许插入或跳过。

使用谷歌搜索,我发现反转是一个字符串反转,并最终有很多点击EXCEPT和INTERSECT。

所以,即使只是知道谷歌适当的术语,所以我可以自我教育,将不胜感激。

+0

如何'CrossRefFruitId'涉及到' FruitId'在你的模式中 - 你能展示它吗? –

+0

已更新以显示参考...希望我了解您的请求。 – GPGVM

回答

1
create table #test 
(
id1 int, 
id2 int 
) 

insert into #test 
select 1,6 
union all 
select 2,5 
union all 
select 6,1 
union all 
select 5,3 
union all 
select 5,2 


select * from #test t1 
where exists(
select 1 from #test t2 where t1.id1=t2.id2 and t1.id2=t2.id1) 

更新为每一个问题:

你的触发应该包含下面的代码行,检查其反转行的存在..

if exists(
select 1 from 
#test t1 
join 
inserted i 
on i.id1=t1.id2 and i.id2=t1.id1 
) 
begin 
rollback tran 
--some message--- 
end 
+0

1,6会触发4,3? –

+0

谢谢,错过了 – TheGameiswar

+0

很酷的使用加入...感谢您花时间帮助。 – GPGVM