我已经坚持了很长一段时间以及我尝试在网上查找的解决方案,我甚至无法理解,因为我对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;
这些都没有奏效并继续抛出语法错误...... 我能做什么才能显示我想要的数据?
如果我愿意,我可以只查看一个特定业务的所有三个表的数据吗?
感谢您阅读
答案 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子句,指定所需业务的值。