簡體   English   中英

SQL LEFT JOIN 用於第一個表的所有記錄和另一個表的匹配記錄

[英]SQL LEFT JOIN for all records of first table and matched records of another table

我有 3 張桌子。

  1. 帶有id、name等列的表賣家

  2. 客戶,如id、name等。

  3. 具有seller_id、customer_id、“friends”、“pending_request”等友誼狀態的表連接

現在我想獲取所有不是特定客戶朋友的賣家。

所以我嘗試使用連接表的左連接從賣家表中獲取記錄,條件狀態不是“朋友”

我嘗試了以下查詢,但沒有幫助我。 我也嘗試了其他查詢,但沒有幫助。

SELECT * FROM `seller` LEFT JOIN `connections` ON seller.user_id = connections.user_id WHERE customer_id = 10 AND request_status NOT LIKE "friends"

這是我想要結果的參考屏幕。 就像對於特定客戶一樣,所有不是朋友或請求的賣家都處於待處理狀態。

在此處輸入圖像描述

customer_id = 10加入'friends'類型的connections ,並在WHERE子句中檢查connections.user_id是否為NULL ,即沒有加入任何內容。

SELECT *
       FROM seller
            LEFT JOIN connections
                      ON seller.user_id = connections.user_id
                         AND connections.customer_id = 10
                         AND connections.request_status = 'friends'
       WHERE connections.user_id IS NULL;

或者使用相關的子查詢,獲得與NOT EXISTS的連接。

SELECT *
       FROM seller s
       WHERE NOT EXISTS (SELECT *
                                FROM connections c
                                WHERE c.user_id = s.user_id
                                      AND c.customer_id = 10
                                      AND c.request_status = 'friends');

嘗試這個:

SELECT * FROM `seller` LEFT JOIN `connections` ON seller.user_id = connections.user_id WHERE customer_id = 10 AND (request_status NOT LIKE "friends"
or request_status is null)

或這個:

SELECT * FROM `seller` LEFT JOIN `connections` ON seller.user_id = connections.user_id WHERE customer_id = 10 AND IFNULL(request_status,"other") NOT LIKE "friends"

暫無
暫無

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

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