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