2011-05-24 55 views
1

我有兩個表,並希望根據從表參考ID來獲得從表B technology_tag的第一次出現的一個:爲了通過返回的結果

select b.dbid, b.technology_tag 
from tblConnect a, tblSites b 
where a.Site_DBID = 2 
and a.Related_Site_DBID = 1 
and (b.dbid = a.bsc_tag_dbid or b.dbid = a.related_bsc_dbid or b.dbid = a.related_msc_dbid) 

我想這裏是命令基於返回的行(在where子句中)

1st- b.dbid = a.bsc_tag_dbid 
2cnd- b.dbid = a.related_bsc_dbid 
3rd- b.dbid = a.related_msc_dbid 

有沒有人有線索如何做到這一點?

+3

我已經格式化了你的代碼,所以有可能其他人可以閱讀它。將來你應該自己做 - 使用代碼按鈕'{}'來標記代碼,但也儘量不要在一行中出現過多。像上面這樣的格式(這不是唯一可行的方法)使每個人(包括你自己在6個月的時間內)都更容易找到查詢的單獨的子句。 – 2011-05-24 14:27:18

回答

1

首先,在執行連接時,應切換到使用實際的JOIN子句。也就是說,這個ORDER BY子句應該做你想做的事:

SELECT 
    B.dbid, 
    B.technology_tag 
FROM tblConnect A 
INNER JOIN tblSites B ON 
    B.dbid IN (A.bsc_tag_dbid, A.related_bsc_dbid, A.related_msc_dbid) 
WHERE 
    A.Site_DBID = 2 AND 
    A.Related_Site_DBID = 1 
ORDER BY 
    CASE 
     WHEN B.dbid = A.bsc_tag_dbid THEN 1 
     WHEN B.dbid = A.related_bsc_dbid THEN 2 
     WHEN B.dbid = A.related_msc_dbid THEN 3 
     ELSE 4 -- Not really necessary, but I always use an ELSE when I use CASE 
    END 
+0

非常感謝,它的工作原理 – Ahmad 2011-05-24 15:00:32

+0

但查詢現在需要很多時間來檢索記錄,你有什麼想法嗎? – Ahmad 2011-05-24 15:24:41

+0

首先,我將更改查詢以使用正確的JOIN語法。然後確保您的表格已正確編制索引。根據您使用的特定RDBMS,它可能包括分析查詢的工具,以查看它花費的最多時間。您還可以將OR語句更改爲單個IN語句:'B.dbid IN(A.bsc_tag_dbid,A.related_bsc_dbid,A.related_msc_dbid)' – 2011-05-24 15:31:31