簡體   English   中英

如何使用自我聯接獲取不匹配的記錄

[英]How to get unmatching records using self join

假設我有一個名為users的表,其中包含以下各列:

 user_id (int), 
 job_id (int),
 created (date)

我想抓住兩個用戶,並根據job_id獲得不匹配的記錄。

user_id  | job_id | created 

15242    |  234   | 2015-04-07 
15242    |  441   | 2015-04-08
15242    |  345   | 2015-04-08
24521    |  234   | 2015-04-09

我想獲得job_ids 441和345。

因此需要自我加入

SELECT users.job_id
FROM users as switch_from
LEFT JOIN users as switch_to ON switch_from .job_id = switch_to .job_id
WHERE switch_from.user_id = 15242 AND switch_to.user_id = 24521;

如果不是這給我的別名表中的所有job_ids switch_from從別名表中缺少switch_to

這將返回唯一具有匹配job_id的行。

我認為您也可以使用減號語句:

SELECT member_id, name FROM a
MINUS
SELECT member_id, name FROM b

如果您希望switch_to中的記錄在switch_from中是nog,則可以這樣進行。

SELECT users.job_id FROM users as switch_to
WHERE switch_to.user_id = 24521
MINUS
SELECT users.job_id FROM users as switch_from
WHERE switch_from.user_id = 15242;

像這樣嘗試:

SELECT switch_from.job_id
FROM users as switch_from
LEFT JOIN users as switch_to ON switch_from.job_id = switch_to.job_id AND switch_to.user_id = 24521
WHERE switch_from.user_id = 15242 AND switch_to.user_id IS NULL;

試試這個查詢:

SELECT users.job_id FROM users as switch_from
   LEFT JOIN users as switch_to ON 
   ( switch_from .job_id = switch_to .job_id and switch_to.user_id = 24521 )
   WHERE switch_from.user_id = 15242

暫無
暫無

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

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