2016-09-14 76 views
2
[TABLE 1] 
+---------+---------+------------------+ 
| post_id | user_id | description  | 
+---------+---------+------------------+ 
| 1  | 1  | Sample post 1 | 
| 2  | 1  | Sample post 2 | 
| 3  | 2  | Sample post 3 | 
| 4  | 2  | Sample post 4 | 
| 5  | 3  | Sample post 5 | 
+---------+---------+------------------+ 

[TABLE 2] 
+---------+---------+---------+ 
| id  | user_id | post_id | 
+---------+---------+---------+ 
| 1  | 1  | 1  | 
| 2  | 2  | 2  | 
+---------+---------+---------+ 

當表1中的USER_ID 1已經存在於表2中,並且其表2中包含其受尊重的POST_ID時,它不應該是返回選擇查詢的一部分。相反,它會返回表1中的POST_ID 2,3,4,5。需要關於SQL QUERY的幫助。使用外部聯接或聯合合併項目

當表1中的USER_ID 2已經存在於表2中,並且其表2中包含其受尊敬的POST_ID時,預期返回選擇查詢將爲POST_ID 1,3,表1中的4,5以及其他id。

在此先感謝你們! :)

+3

我不確定我是否理解這個問題...你可能可以編輯並給你預期的結果集? – Pachonk

+0

問題並不清楚,你至少應該包括所需的輸出,以便我們有一個視覺。 –

+0

如果我明白你想要什麼,你應該有POST_ID 3,4和5作爲結果,但不是從USER_ID 1開始的2。 – olibiaz

回答

0

看起來像一個反連接模式可以達到指定的結果。

SELECT t.post_id 
     , t.user_id 
     , t.description 
    FROM `[Table 1]` t 
    LEFT 
    JOIN `[Table 2]` u 
    ON u.post_id = t.post_id 
    AND u.user_id = ? 
    WHERE u.post_id IS NULL 
    ORDER BY t.post_id 

The?是用於指定用戶標識的佔位符字符。

這本質上說,從表2的匹配行一起返回從表1中的所有行,但(這裏的技巧),WHERE子句說要排除發現匹配的一行在表2中只留下所有行從表1的行沒有在表中的匹配2.

抗加入需要的一點點努力讓你的大腦纏,但一旦你得到它,這是一個非常寶貴的工具,以保持得心應手在SQL工具欄中。

還有其他查詢模式將返回等效結果,例如NOT EXISTS (correlated subquery)或更常見的NOT IN (subquery)。 (隨着NOT IN,講究的是子查詢不返回任何NULL值。)

編輯

從連接謂詞刪除了條件u.user_id = t.user_id。看起來像[Table 1]中的user_id是帖子的「作者」。並且與用戶是否「查看」帖子沒有關係。

+0

哦,天哪謝謝你!讓我試試:) – ctosdotcom

+0

編輯的查詢從聯接條件中移除條件'u.user_id = t.user_id'。它看起來像(不幸命名的)表['表1]'中的'user_id'是作爲帖子的作者,並且與帖子是否被用戶「查看」沒有關係。 – spencer7593

+0

噢,謝謝。指出。還在測試它hahaha – ctosdotcom

0

根據您的示例數據,由於表1中的USER_ID 1已經存在於表2中,並且它的受尊敬的POST_ID已存在,所以它應該返回POST_ID 2,3,4,5。

查詢:

SELECT t1.* FROM table2 t2 
RIGHT OUTER JOIN table1 t1 
ON t2.user_id = t1.user_id AND t2.post_id = t1.post_id 
WHERE t2.user_id IS NULL 

最終結果:

post_id  user_id  description 
2   1   Sample post 2 
3   2   Sample post 3 
4   2   Sample post 4 
5   3   Sample post 5 

這是你在找什麼?

+0

謝謝讓我去檢查它 – ctosdotcom

+0

@ctosdotcom是這個答案爲你工作? – vhen