SQL 查询连接一对多关系和多对多关系
SQL query to join one to many relation with many to many relation
我有以下结构
COFFEE ORDER_ITEMS ORDERS USERS
------ ----------- ------ -----
id order_id id id
name coffee_id user_id email
订单和咖啡之间存在多对多关系。以及用户和订单之间的一对多关系。我想知道用户点了哪些咖啡。
我有一个查询来检索每个用户的订单:
SELECT users.id as USERID, orders.id as ORDERID
FROM users
INNER JOIN orders on users.id = orders.user_id
举个例子:
userid orderid
1 1
1 2
2 3
4 4
我有一个查询来检索属于订单的咖啡:
SELECT orders.id, coffees.name
FROM orders, coffees, order_coffees
WHERE coffees.id = order_coffees.coffee_id
AND orders.id = order_coffees.order_id
例如,这给了我:
orderid coffeename
1 Coffee A
1 Coffee B
2 Coffee A
2 Coffee C
我想得到以下信息:
userid orderid coffeename
1 1 Coffee A
1 1 Coffee B
1 2 Coffee A
2 3 Coffee C
4 4 NULL
数据sheet
1.main订单(master_list)
3.Order详情(预订)
3.coffee 餐饮(店铺)
4.user 信息(用户)
SELECT * FROM `booking` as a
inner join `master_list` as b on a.`mas_id`=b.`mas_id`
inner join `shop` as c on a.`shop_id`=c.`shop_id`
inner join `user` as d on b.`user_id`=d.`user_id`
不知道对你有没有帮助试试
您应该加入从 table users
开始的所有 4 table 并使用 INNER
加入,如果您只想要订购咖啡的用户的结果至少一次,或者 LEFT
加入如果你想要所有用户的结果,即使是那些从未下过订单的用户。
对 ON
子句和 table 的别名使用适当的连接,使代码更具可读性:
SELECT u.id userid,
o.id orderid,
c.name coffeename
FROM users u
INNER JOIN orders o ON o.user_id = u.id
INNER JOIN order_items oi ON oi.order_id = o.id
INNER JOIN coffees c ON c.id = oi.coffee_id;
我有以下结构
COFFEE ORDER_ITEMS ORDERS USERS
------ ----------- ------ -----
id order_id id id
name coffee_id user_id email
订单和咖啡之间存在多对多关系。以及用户和订单之间的一对多关系。我想知道用户点了哪些咖啡。
我有一个查询来检索每个用户的订单:
SELECT users.id as USERID, orders.id as ORDERID
FROM users
INNER JOIN orders on users.id = orders.user_id
举个例子:
userid orderid
1 1
1 2
2 3
4 4
我有一个查询来检索属于订单的咖啡:
SELECT orders.id, coffees.name
FROM orders, coffees, order_coffees
WHERE coffees.id = order_coffees.coffee_id
AND orders.id = order_coffees.order_id
例如,这给了我:
orderid coffeename
1 Coffee A
1 Coffee B
2 Coffee A
2 Coffee C
我想得到以下信息:
userid orderid coffeename
1 1 Coffee A
1 1 Coffee B
1 2 Coffee A
2 3 Coffee C
4 4 NULL
数据sheet
1.main订单(master_list)
3.Order详情(预订)
3.coffee 餐饮(店铺)
4.user 信息(用户)
SELECT * FROM `booking` as a
inner join `master_list` as b on a.`mas_id`=b.`mas_id`
inner join `shop` as c on a.`shop_id`=c.`shop_id`
inner join `user` as d on b.`user_id`=d.`user_id`
不知道对你有没有帮助试试
您应该加入从 table users
开始的所有 4 table 并使用 INNER
加入,如果您只想要订购咖啡的用户的结果至少一次,或者 LEFT
加入如果你想要所有用户的结果,即使是那些从未下过订单的用户。
对 ON
子句和 table 的别名使用适当的连接,使代码更具可读性:
SELECT u.id userid,
o.id orderid,
c.name coffeename
FROM users u
INNER JOIN orders o ON o.user_id = u.id
INNER JOIN order_items oi ON oi.order_id = o.id
INNER JOIN coffees c ON c.id = oi.coffee_id;