2011-06-18 71 views
-1

我有一個電子郵件地址的數據庫表。 我想根據一組字符串來查詢它。需要SQL查詢幫助 - out join解決方案?

我不只是希望查詢結果返回包含在字符串集中的那些電子郵件地址 - 這很簡單。

相反,我想找回所有在查詢中使用的字符串,以及一個布爾字段,告訴我它是否在表中。例如: [email protected] TRUE [email protected] TRUE [email protected] FALSE

我對溶液(用「不在」查詢加入一個「在」查詢) - 但我希望有更好的東西。

(是的,我知道我可以做簡單的查詢,然後從集合中刪除查詢字符串的發現項目弄明白沒有數據庫)

+1

我會嘗試UNION,如下所示。它接近你在做什麼,我不確定語法,但你可能會明白。 SELECT email_address,「TRUE」FROM table WHERE email_address IN('[email protected]','[email protected]') UNION SELECT email_address,「FALSE」FROM table WHERE email_address NOT in('a @ b。 com','[email protected]')' – Sai

+5

對於什麼數據庫? SQL代表「STRUCTURED查詢語言」,而不是「STANDARDIZED ...」 –

+0

哪個數據庫服務器?這個問題是不明確的。 –

回答

1

把你要查詢的地址爲(臨時)表,然後左加入電子郵件地址表。

SELECT 
    r.email_address, 
    CASE WHEN e.email_address IS NULL THEN 'FALSE' ELSE 'TRUE' END AS is_present 
FROM requested_emails r 
    LEFT JOIN email_addresses e ON r.email_address = e.email_address 
+0

謝謝...是的,我相信臨時表會做到這一點。 –

0
declare @CrappyStr varchar(10) 
set @CrappyStr = 'dummy' 

select @CrappyStr AS SearchString 
, email_address 
, CASE WHEN charindex(@CrappyStr, email_address) > 0 THEN 'True' 
ELSE 'False' END AS [BOO-lean] 
from SnarkyTable 
0

注意SQL沒有一個boolean類型。這裏我使用了一個字符串。

SELECT email_address, NVL(sq.present, 'FALSE') AS present 
    FROM mytable t 
    LEFT JOIN (SELECT email_address, 'TRUE' AS present 
       FROM mytable 
       WHERE email_address in (... your list here ...) 
      ) sq ON sq.email_address = t.email_address 
+0

這是我試圖去的那種事...不幸的是,我無法在mysql上爲我工作。我換了NVL的IFNULL功能,但我認爲這不應該做任何壞事。它抱怨email_address含糊不清,所以我繼續詢問t.email和sq.email。它仍然只給了我表中的電子郵件記錄。 –

+0

你能準確地發佈你所做的一切嗎? – eaolson