sql - sql查询查找在特定公司地址购买的选择客户
问题描述
这是我的桌子
CREATE TABLE Customer
(
ID CHAR(50),
Customer_FName CHAR(50),
Customer_Lname CHAR(50)
);
CREATE TABLE Buying
(
Customer_ID CHAR(50),
Product_ID CHAR(50),
Order_Time CHAR(50)
);
CREATE TABLE Product
(
ID CHAR(50),
Name CHAR(50),
Address CHAR(50)
);
我正在尝试查找在“Burwood”中使用其公司地址购买产品的所有客户,并列出客户的 ID、姓名、产品 ID、产品名称和产品地址
Select
Buying.Customer_ID, Buying.Product_ID, Product.ID,
Product.Name, Customer.ID,
Customer.Customer_FName, Customer.Customer_Lname
from
((Buying
inner join
Product on Buying.Product_ID = Product.ID)
inner join
Customer on Buying.Customer_ID = Customer.ID)
where
Product.Address like '%Burwood%';
我想合并三个表,但它显示“未选择行”。
我还给了一个样本数据表
解决方案
为什么选择CHAR作为所有表的所有列的数据类型?对于基于 CHAR 的列,DB 倾向于将值填充到定义的列宽。也就是说,这不是你没有得到结果的原因。您可能需要检查在插入期间是否在 ID 中添加了任何额外的空格或不可打印的字符,从而导致内部连接失败。
我建议将字段更改为VARCHAR,验证您的插入,然后像下面演示的那样查询。你会开始得到结果,就像我一样..
CREATE TABLE Customer (
ID varchar(50),
Customer_FName varchar(50),
Customer_Lname varchar(50)
);
CREATE TABLE Buying (
Customer_ID varchar(50),
Product_ID varchar(50),
Order_Time varchar(50)
);
CREATE TABLE Product (
ID varchar(50),
Name varchar(50),
Address varchar(50)
);
insert into customer values('10001', 'John', 'Smith');
insert into Buying values('10001', '772', '2016/09/01');
insert into Product values('772', 'Telephone', '22 Ave, Burwood');
select b.product_id, p.name, b.customer_id, c.customer_fname, c.customer_lname
from buying b
join product p on b.product_id = p.id
join customer c on b.customer_id = c.id
where lower(p.address) like '%burwood%'