2012-07-02 52 views
0

我想以使用COUNT作爲JOIN的條件的方式將sql JOINCOUNT一起使用。使用COUNT的SQL JOIN

例如

SELECT * FROM tbl1 
    INNER JOIN (SELECT * FROM tbl2) t2 
    ON (SELECT COUNT(*) FROM tbl1) > 0 

這是可能的,或有人可以告訴我另一種方式嗎?

PS-我遇到的真正問題是我有兩個表A和B,我需要從A中選擇ID,其中創建日期大於某個值。同時我想確保表B在表A中沒有該ID。這可以正常工作,但是當我在表B中沒有數據時,查詢不會產生任何結果。

SELECT a.user_id from (SELECT * FROM A WHERE DATEDIFF(event_date,'certain_value') >=another_value) a INNER JOIN B b ON a.user_id != b.user_id 

我試圖用計數這樣,但未能

SELECT a.user_id from (SELECT * FROM A WHERE DATEDIFF(event_date,'certain_value') >=another_value) a INNER JOIN B b ON count(B.user_id) = 0 OR a.user_id != b.user_id 
+0

你能解釋'ON(SELECT COUNT(*)FROM tbl1)> 0'發生了什麼? – Coffee

+0

什麼是關係在tbl1 COUNT()和tbl2之間? –

+0

我不能馬上理解它,儘管它絕對是一種可能性:任何產生布爾值的東西都可以用作連接的條件。如果你分享了你正在嘗試解決的問題,那麼你是否需要這樣的連接會更容易。 – dasblinkenlight

回答

1

編寫查詢,在ON條件無所作爲和相當於ON (1=1)方式(如果tbl1中沒有記錄,則select * from tbl1 inner join tbl2 on [any condition]將始終返回空結果集)。

從你更新的問題,我想你需要:

SELECT 
    a.user_id 
FROM 
    (SELECT * 
    FROM A 
    WHERE DATEDIFF(A.event_date, 'certain_value') >= another_value) AS a 
WHERE 
    NOT EXISTS (SELECT 1 
       FROM b 
       WHERE b.user_id = a.user_id) 
+0

感謝您的幫助。現在我知道我做錯了什麼。 – Pradeep

0

試試這個:

SELECT A.user_id 
FROM A 
WHERE DATEDIFF(A.event_date,'certain_value') >= another_value) 
    AND NOT EXISTS (SELECT B.user_id FROM B Where A.user_id = B.user_id) 
0

「內部連​​接返回行只有當兩個表中的匹配連接條件的至少一個行。」你想要的是爲外連接,這樣你得到的結果,即使存在B.沒有數據請參見:http://msdn.microsoft.com/en-us/library/aa213228%28v=SQL.80%29.aspx

如果我正確理解你的問題雖然你可能要使用:

WHERE a.user_id NOT IN (SELECT user_id FROM B) 

爲你的條件,而不是在表上做一個連接,因爲你根本沒有從B中選擇任何數據