2019年11月14日
目錄 從不訂購的客戶
題目:
CREATE TABLE Customers (
Id INT NOT null ,
Name VARCHAR(128) DEFAULT '',
PRIMARY KEY (Id)
) ENGINE = INNODB DEFAULT CHARSET=utf8mb4;
CREATE TABLE Orders (
Id INT NOT null ,
CustomerId LONG NOT null ,
PRIMARY KEY (Id)
) ENGINE = INNODB DEFAULT CHARSET=utf8mb4;
解題1
-- not exists
SELECT NAME Customers FROM customers
WHERE NOT EXISTS (SELECT 1 FROM orders WHERE orders.CustomerId = customers.Id);
解題2
-- left join
select A.Name as Customers
from Customers A left join Orders B
on A.Id = B.CustomerId
where B.Id is null;
解題3
select customers.name as 'Customers'
from customers
where customers.id not in
(
select customerid from orders
);
思路拓展
其中上圖黑色框裏的sql解決的問題是:不在表裏的數據,也就是在表A裏的數據,但是不在表B裏的數據。
對於這個題目“不是近視眼的學生都有誰?”,就是在“學生表”裏的數據,但是不在“近視學生”表裏的數據。我們選擇下圖黑色框裏的左聯結sql語句。
select ...
from 表1 as a
left join 表2 as b
on a.列名=b.列名
where b.列名 is null;
作者:houziAI
鏈接:https://leetcode-cn.com/problems/customers-who-never-order/solution/tu-jie-sqlmian-shi-ti-cha-zhao-bu-zai-biao-li-de-s/
來源:力扣(LeetCode)
著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。
思路拓展2
- select 1 就是select * 麼?
select * 會返回所有的字段,而select 1 存在記錄的話會返回數字1