LEETCODE database 183. Customers Who Never Order


      创建2张表  Customer and Order

Create Table Customers(
Id int not null,
Name varchar(90) not null
);

Create Table Orders(
Id int not null,
CustomerId int not null
);

插入的数据如下

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


值得注意的是 SELECT NAME FROM CUSTOMS,Orders 出来的结果是

+-------+
| NAME  |
+-------+
| Joe   |
| Joe   |
| Henry |
| Henry |
| Sam   |
| Sam   |
| Max   |
| Max   |
+-------+
并不是只有一行Name 相当于把2个表给相乘了起来 order表里面只有2个数据 所以是name*2  如果是3个数据就是name*3 也就是name会出现3次

INSERT INTO ORDER VALUE(3,4);

SELECT出来的结果是

mysql> select * from customers,orders;
+----+-------+----+------------+
| Id | Name  | Id | CustomerId |
+----+-------+----+------------+
|  1 | Joe   |  1 |          3 |
|  1 | Joe   |  2 |          1 |
|  1 | Joe   |  3 |          4 |
|  2 | Henry |  1 |          3 |
|  2 | Henry |  2 |          1 |
|  2 | Henry |  3 |          4 |
|  3 | Sam   |  1 |          3 |
|  3 | Sam   |  2 |          1 |
|  3 | Sam   |  3 |          4 |
|  4 | Max   |  1 |          3 |
|  4 | Max   |  2 |          1 |
|  4 | Max   |  3 |          4 |
+----+-------+----+------------+

所以我之前的做法

SELECT NAME FROM Customers,Orders
WHERE Customers.Id!=Orders.CustomerId; 是错误的


应该是

SELECT NAME FROM CUSTOMERS c WHERE c.Id
NOT IN(SELECT CustomerId FROM Orders o)









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值