2017-02-18 38 views
0

想要獲得全部UserNameUsersDataTbl和匹配UserName如果存在EnrollmentsTbl。但我想確定EnrollmentsTbl中存在哪些,而不是創建2條記錄。如果存在,可以添加一個布爾表達式1,如果不存在,則添加0獲取第一個TBL中的所有記錄和第二個TBL中的匹配(指示存在的那些)

我的SQL是隻返回現有記錄EnrollmentsTbl

SELECT u.UserName 
    , e.Completed 
    FROM UsersDataTbl u 
    LEFT 
    JOIN EnrollmentsTbl e 
    ON u.UserName = e.UserName 
WHERE e.ClassName LIKE 'Word%' 
    AND u.UserName LIKE 'bar%' 

另一個問題:

(SELECT u.UserName, u.LastName, d.Station 
    , (e.UserName IS NOT NULL) as completedl 
    FROM UsersDataTbl u 
    LEFT 
    JOIN EnrollmentsTbl e 
    ON u.UserName = e.UserName 
     AND e.ClassName LIKE 'Word%') 
    INNER JOIN UsersDataCareerTbl d 
    ON u.UserName = d.UserName 
    WHERE u.Career = 1 AND Active = 1 ORDER BY u.LastName 
+1

注意'LEFT JOIN X ...,其中x = ...'是一樣的'INNER JOIN X ...' – Strawberry

+0

注知道誰一直在編輯我的代碼 - 但SQL是不正確的了? ? – BarclayVision

+0

我使它可讀。我沒有做任何結構改變。 – Strawberry

回答

1

您能給我們的is not null測試如果一個字段的值是空或不是,並返回一個true或假。如果用戶名不在EnrollmentsTbl中,則左連接將返回null

我將e.ClassName LIKE 'Word%條件從where子句移到了連接條件,因爲它將left join更改爲inner join,從而破壞了查詢的整個目的。

SELECT u.UserName 
    , (e.UserName IS NOT NULL) as user_exists_in_EnrollmentsTbl 
    FROM UsersDataTbl u 
    LEFT 
    JOIN EnrollmentsTbl e 
    ON u.UserName = e.UserName 
     AND e.ClassName LIKE 'Word%' 
WHERE u.UserName LIKE 'bar%' 
+0

非常感謝 - 這是完美的。 – BarclayVision

+0

你能否幫助我進行上面的更新 - 需要將另一個錶鏈接到當前的工作示例。 – BarclayVision

+1

如果您有其他問題,請將其作爲單獨問題提出。 – Shadow

相關問題