2016-04-28 164 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