首页 > 解决方案 > 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%';

我想合并三个表,但它显示“未选择行”。

我还给了一个样本数据表

标签: sqldatabase

解决方案


为什么选择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%'

在此处输入图像描述


推荐阅读