2012-09-18 92 views
0

我在同一個Sybase數據庫中有兩個具有完全相同結構的表,但它們是單獨的表。SQL Sybase查詢奇怪行爲

此查詢工作在的2之一:

select * from table1 where 
QUOTA_FIELD > 
(SELECT 
count(ACCOUNT) FROM 
table1 As t1 
where SECTOR = t1.SECTOR 
AND 
STATUS = 'QUOTA' 
) 

但對於第二個表我必須把它改成這樣:

select * from table2 as tref where 
QUOTA_FIELD > 
(SELECT 
count(ACCOUNT) FROM 
table2 As t2 
where tref.SECTOR = t2.SECTOR 
AND 
STATUS = 'QUOTA' 
) 

有在哪裏這樣會執行,這意味着限制它需要像第一個查詢一樣工作。

有沒有人有任何想法,爲什麼第一可能會按預期工作,第二不會?

+1

您確定您的第一個查詢確實總是給出正確的結果嗎?我會期望'SECTOR = t1.SECTOR'將意味着't1.SECTOR = t1.SECTOR'(這總是正確的)。 – ruakh

+0

是的,第一個查詢總是好的,第一個查詢也在第二個表上工作過,但它似乎像更新的一些組合已停止工作 – HeHasMoments

回答

0

因爲我還沒有允許作爲一個答案發表評論,這裏的問題是「有沒有人......?」:

號我找不到任何人:)

這第一個查詢不能正常工作,因爲它將一列與自身進行比較(只要列名都是正常的ASCII字符而不是一些類似的UNICODE字符串)。請給一個證明,這個查詢的結果是在任何情況下一樣查詢2.

此外,第二查詢通常會這樣做的:where SECTOR = tref.SECTOR ...

0

你可能會找像這樣在查詢#1:

select * from table1 t2 where 
QUOTA_FIELD > 
(SELECT 
count(ACCOUNT) FROM 
table1 As t1 
where t2.SECTOR = t1.SECTOR   
AND 
t1.STATUS = 'QUOTA' 
) 

此明確規定,在子查詢表是用在外部查詢(聯合相關子查詢)的表連接。

如果這可行,請在查詢#2中使用相同的想法