我是编程和SQL的新手。在我的Rails应用程序中,我有称为用户,列表和预订的表。用户has_many列表和预订。列出has_many预订和belongs_to用户,预订belongs_to列表和用户。
模式:
create_table "users", force: :cascade do |t|
t.string "email",
t.string "fullname",
t.string "phone_number"
end
create_table "listings", force: :cascade do |t|
t.string "vehicle_type",
t.string "listing_name" ,
t.string "make",
t.string "model",
t.string "year",
t.integer "daily_rent",
t.integer "user_id"
end
create_table "reservations", force: :cascade do |t|
t.integer "user_id",
t.integer "total",
t.integer "listing_id"
end
mysql schema:
desc users;
id | int(11) | NO | PRI | NULL | auto_increment |
email | varchar(255)
fullname | varchar(255)
phone_number | varchar(255)
desc listings;
id | int(11) | NO | PRI | NULL | auto_increment |
vehicle_type | varchar(255)
make | varchar(255)
model | varchar(255)
year | varchar(255)
listing_name | varchar(255)
daily_rent | int(11) |
user_id | int(11) | YES | MUL | NULL | |
desc reservations;
| id | int(11) | NO | PRI | NULL | auto_increment |
user_id | int(11) | YES | MUL | NULL |
total | int(11) | YES | | NULL |
listing_id | int(11) | YES | MUL | NULL |
我希望通过以下详细信息从预订中获取查询
RESERVATIONS # | LISTING OWNER NAME | LISTING OWNER EMAIL | LISTING OWNER PHONE | GUEST NAME | GUEST EMAIL | CLASS OF LISTING | YEAR OF LISTING | NIGHTLY RENTAL RATE OF LISTING| TOTAL RENTAL AMOUNT
作为列表所有者和访客,两者都是用户 我只需要一个简单的SQL查询就可以通过访客电子邮件和电话获取所有预订详细信息以及相应预订的列表详细信息
我的疑问:
select r.id , u.email, u.fullname ,l.listing_name,l.year,l.daily_rent,r.total from reservations r , users u ,listings l where u.id = r.user_id and l.id = r.listing_id;
1)我无法提取列出的所有者名称所有者电子邮件|所有者手机,但我能够来获取访客姓名|客户电子邮件|客人手机。 如何获取LISTING OWNER详细信息?
2)如何使用连接或任何其他SQL子句编写整个查询(我不是u.email,u.fullname,l.year..etc方法的粉丝)
3)是否可以从单个查询中获取所有上述数据?
如果您需要其他详细信息,请与我们联系。
任何帮助都是高度赞赏的。谢谢!
答案 0 :(得分:1)
对三个关联表使用内部联接查询,如下所示:
SELECT r.id, u.email, u.fullname, l.listing_name, l.year, l.daily_rent, r.total
FROM users u INNER JOIN listings l ON u.id = l.user_id INNER JOIN
reservations r ON l.id = r.listing_id and l.user_id = r.user_id
希望它能正常工作。如果您需要任何进一步的帮助,我将修改查询。