我有兩個表:左邊一個是users_projects,正確的是項目: SQL:選擇集合A的不是B
我想選擇用戶3不參與項目(僅P_ID 5和7)。
我已經試過SELECT * FROM users_projects up INNER JOIN projects p ON p.p_ID=up.p_ID WHERE up.u_ID!=3
但也返回我的p_id 1用戶其中兩個2和3的一部分。
感謝您的幫助!
我有兩個表:左邊一個是users_projects,正確的是項目: SQL:選擇集合A的不是B
我想選擇用戶3不參與項目(僅P_ID 5和7)。
我已經試過SELECT * FROM users_projects up INNER JOIN projects p ON p.p_ID=up.p_ID WHERE up.u_ID!=3
但也返回我的p_id 1用戶其中兩個2和3的一部分。
感謝您的幫助!
與LEFT JOIN
A液:
SELECT
*
FROM
projects p LEFT JOIN users_projects up ON (p.p_ID = up.p_ID AND up.u_ID = 3)
WHERE
up.u_ID IS NULL
基本上選擇所有項目和與所述期望用戶的user_projects
加入其中。即使users_projects
表中沒有對應的行,左連接也會使project
表中的所有行都出現。這些行的所有字段從users_projects
設置爲NULL
,因此我們可以選擇這些行。
這不是一個JOIN
查詢,而是一個帶有一個與NOT IN()
謂詞不相關的子選擇的查詢。
我希望projects
表的列是足夠了...
SELECT
*
FROM
( SELECT 1,'Apple' -- input data, don't use in 'real' query
UNION ALL SELECT 5,'Banna' -- input data, don't use in 'real' query
UNION ALL SELECT 7,'Carrot' -- input data, don't use in 'real' query
UNION ALL SELECT 8,'Durian') -- input data, don't use in 'real' query
projects(p_id,p_name)
WHERE p_id NOT IN (
SELECT
p_id
FROM
( SELECT 2,1 -- input data, don't use in 'real' query
UNION ALL SELECT 2,5 -- input data, don't use in 'real' query
UNION ALL SELECT 2,7 -- input data, don't use in 'real' query
UNION ALL SELECT 3,1 -- input data, don't use in 'real' query
UNION ALL SELECT 3,8) -- input data, don't use in 'real' query
users_projects(u_id,p_id)
WHERE u_id=3
)
;
p_id|p_name
7|Carrot
5|Banna
'從user_projects選擇PROJECTNAME其中的p_id沒有(請從用戶的P-id其中U_ID = 3);' –
不在IS有點危險......我推薦使用無效的NOT EXISTS。 – jarlh
@jarlh你可以添加NOT EXISTS查詢嗎? –