1. 程式人生 > 資料庫 >SQL每日刷題—多表連線

SQL每日刷題—多表連線

SQL—day8

題目

某網站包含兩個表,Customers 表和 Orders 表。編寫一個 SQL 查詢,找出所有從不訂購任何東西的客戶。

示例:
Customers 表:

+----+-------+
| Id | Name  |
+----+-------+
| 1  | Joe   |
| 2  | Henry |
| 3  | Sam   |
| 4  | Max   |
+----+-------+

例如給定上述表格,你的查詢應返回:

+-----------+
| Customers |
+-----------+
| Henry     |
| Max       |
+-----------+

預備知識

多表連線

在這裡插入圖片描述

轉載自 https://leetcode-cn.com/problems/customers-who-never-order/solution/tu-jie-sqlmian-shi-ti-cha-zhao-bu-zai-biao-li-de-s/

思路

1. 如果我們有一份曾經訂購過的客戶名單,就很容易知道誰從未訂購過。然後,我們可以使用 NOT IN 查詢不在此列表中的客戶。

2. 如果沒有這樣的第二最高工資,這個解決方案將被判斷為 “錯誤答案”,因為本表可能只有一項記錄。為了克服這個問題,我們可以將其作為臨時表。附加一個巢狀查詢,內層查詢結果為為空時,將 Null 附給 SecondHighestSalary 使得其返回值為 Null;

程式碼

select customers.name as 'Customers'
from customers
where customers.id not in
(
    select customerid from orders
);
select C.Name as Customers
from Customers as C
left join Orders as O
on  C.Id = O.CustomerId
where O.CustomerId is null

來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/customers-who-never-order