簡體   English   中英

查詢以查找來自 SELECT FROM VALUES 的電子郵件

[英]Query to find emails from SELECT FROM VALUES

我的查詢應該只帶回特定的結果集,但它會返回所有值。 基本上我要做的是用另一個表中的值更新一個表中的 email 列,內部查詢的工作原理是我可以獲得正確的名字/姓氏,但外部查詢返回所有電子郵件,我只想要來自列出的值的電子郵件。

SELECT DISTINCT WorkEmail FROM stafftbl WHERE EXISTS  (
SELECT DISTINCT FirstName,LastName -- inner query starts here
FROM assignments
WHERE Email IN  
(SELECT email 
 FROM 
    (VALUES 
    ('josh@myjob.org'),
    ('pete@myjob.org'),
    ('willy@myjob.org'),
    ('linda@myjob.org'),
    ('mary@myjob.org'),
    ('james@myjob.org'),
    ('ahmed@myjob.org'),
    ('horatio@myjob.org'),
    ('luke@myjob.org'),
    ('terri@myjob.org'),
    ('chuck@myjob.org'),
    ('betty@myjob.org'),
    ('bigbob@myjob.org'),
    ('arthur@myjob.org'),
    ('Ajessica@myjob.org') -- there's a lot more than these.
)E(email))                 -- inner query ends here
)

我知道我可能使用存在錯誤,但我知道我在正確的軌道上,因為我可以從assignments表中取回名稱對,我只是不想返回整個列。 任何幫助,將不勝感激。

編輯:

是的, assignments中存在重復,並且 WorkEmail 與所有 Email 都不匹配! 如果我可以從列表中獲取與stafftbl表中的名字/姓氏匹配的適當電子郵件,我將對assignments email 列進行更新。

懷疑您在子查詢中缺少相關條件。 沒有它,只要assignments中的任何行具有可以在列表中找到的 email,外部查詢就會返回來自stafftbl的所有行。

SELECT DISTINCT WorkEmail 
FROM stafftbl s 
WHERE EXISTS  (
    SELECT 1
    FROM assignments a
    WHERE 
        a.Email = s.WorkEmail     -- correlation to the outer query
        AND a.Email IN  (
            SELECT email 
            FROM (VALUES 
                ('josh@myjob.org'),
                ('pete@myjob.org'),
                ('willy@myjob.org'),
                ('linda@myjob.org'),
                ('mary@myjob.org'),
                ('james@myjob.org'),
                ('ahmed@myjob.org'),
                ('horatio@myjob.org'),
                ('luke@myjob.org'),
                ('terri@myjob.org'),
                ('chuck@myjob.org'),
                ('betty@myjob.org'),
                ('bigbob@myjob.org'),
                ('arthur@myjob.org'),
                ('Ajessica@myjob.org')
            ) E(email)
        )
)

注意 1:不需要使用DISTINCT並從EXISTS子查詢返回特定列。 這個表達式是為了檢查子查詢是否返回了一些記錄,結果基本上被丟棄了。 我將其更改為SELECT 1

注意 2:我還懷疑您在外部查詢中不需要DISTINCT (除非在stafftbl中有重復的電子郵件。

注意 3:由於您的查詢,在子查詢中使用表構造函數VALUES()是不必要的。 您可以只使用IN ,如:

AND a.Email IN  ('josh@myjob.org', 'pete@myjob.org', ...)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM