SQL一对多,多对多,查询构建

时间:2015-08-25 20:20:36

标签: sql many-to-many one-to-many pivot-table

基本上为了快速处理事情,我需要能够访问两个表中的信息,这两个表由一个到多个的中间点连接,然后是多个到多个的关系。具体来说,我有以下相关表格

用户[id,...]

游[USER_ID,...]

trip_type [ID,trip_id,TYPE_ID]

类型[ID,...]

即用户有许多旅行,其中有许多类型的旅行本身有很多旅行。

我的目标是通过他们每次旅行获得与特定用户相关联的每种类型ID(如果发生重复)的列表。

我确信这对于SQL倾向是微不足道的,但我不是那些人之一,因此我只是在写这些废话。

2 个答案:

答案 0 :(得分:0)

select users.id, trip_type.type_id, count(*) from users join trips on trips.user_id = users.id join trip_type on trips.id = trip_type.trip_id group by users.id, trip_type.type_id

这也可以计算用户每种类型的旅行次数。此查询不会列出未进行任何旅行的用户。如果您还需要这些用户,请将“加入”一词更改为“左加入”

答案 1 :(得分:0)

SELECT tt.type_id, u.user_id, tr.id
FROM trip_type tt
 INNER JOIN trips tr ON tr.id = tt.trip_id
 INNER JOIN types ty ON ty.id = tt.type_id
 INNER JOIN users u ON u.id = tr.user_id
 WHERE u.user_id = ?

这将返回特定用户的type_ids,user_id和trip id。