我无法从三个表中加入特定的部分

时间:2017-05-22 11:49:00

标签: sql sqlite

我已经坚持了很长一段时间以及我尝试在网上查找的解决方案,我甚至无法理解,因为我对SQL很新。 我有一个包含3个表的数据库:用户,评论和商家。 对不起,如果我的格式很糟糕,我想让问题尽可能清楚。

首先我创建了表格

create table businesses (
id integer primary key,
name varchar(255)
);

create table users (
id integer primary key,
first_name varchar(255),
last_name varchar(255)
);

create table reviews (
id integer primary key,
stars int, comment varchar(255),
business_id int,
user_id int,
foreign key (business_id) references businesses(id),
foreign key (user_id) references users(id)
);

然后我在每个表中添加了一些数据。

insert into businesses (name) values ("Grundy Hollow");
insert into businesses (name) values ("Lotus Yoga");
insert into users (first_name, last_name) values ("Bradford", "Pitt");
insert into users (first_name, last_name) values ("Holly", "Berry");
insert into users (first_name, last_name) values ("Steven", "Wonder");
insert into reviews (stars, comment, business_id, user_id) values (5, "nice", 1, 2);
insert into reviews (stars, comment, business_id, user_id) values (4, "p good", 1, 1);

因此,根据我的知识(缺乏),根据评论打印所有这些,我做了以下,

select * from reviews, users, businesses where reviews.user_id = users.id
and reviews.business_id = businesses.id;

返回了哪个,

1|5|nice|1|2|2|Holly|Berry|1|Grundy Hollow
2|4|p good|1|1|1|Bradford|Pitt|1|Grundy Hollow

由于重复行为,我想查看用户的姓名,公司名称,星级评分和评论。这就是我无处可去的地方。我尝试了很多不同的方法,

users.first_name, users.last_name, businesses.name, reviews.stars, reviews.comment
from reviews
join users on reviews.user_id = users.id
and businesses on reviews.business_id = businesses.id;

select users.first_name, users.last_name, reviews.stars, reviews.comment, businesses.name
from reviews
join users on reviews.user_id = users.id
and reviews
join businesses on reviews.business_id = business.id;

select users.first_name, users.last_name, reviews.stars, reviews.comment, businesses.name
from reviews
join users on reviews.user_id = users.id
and businesses on reviews.business_id = business.id; 

这些都没有奏效并继续抛出语法错误...... 我能做什么才能显示我想要的数据?

如果我愿意,我可以只查看一个特定业务的所有三个表的数据吗?

感谢您阅读

2 个答案:

答案 0 :(得分:1)

你非常接近。这是使用表别名的正确语法:

select u.first_name, u.last_name, r.stars, r.comment, b.name
from reviews r join
     users u
     on r.user_id = u.id join
     businesses b
     on r.business_id = b.id;

也就是说,您可以在join子句中链接FROM运算符。 and不属于join运算符的一部分; and适用于条件)。

答案 1 :(得分:0)

首先像以前一样创建连接,即检查r,用户u,企业b和指定r.business_id = b.id等的where子句,然后再选择u.first_name列名。
所以你得到:
选择u.first_name,u.last_name,r.stars,r.comment,b.name
来自评论r,用户u,企业b
其中r.business_id = b.id  
和r.user_id = u.id;

要查看某个特定的业务,只需添加另一个where子句,指定所需业务的值。