如何用5个不同的表mysql创建内部查询

时间:2014-07-07 13:51:41

标签: mysql ruby-on-rails

Having 5 tables 
Table a_dates = id, 
Table b_types = id, a_date_id, c_type_id, 
Table c_types = id, name, 
Table d_profiles =  id, name, profile_type 
Table e_ps = id, a_date_id, d_profile_id  

从a_dates需要获取b_types,...然后从b_types需要c_types名称,...然后将c_types名称与d_profiles名称进行比较并获取d_profiles id ....如果等于然后使用a_date_id,d_profile_id在e_ps中创建记录。

任何人都可以帮我从内连接中获取查询。

我试过,这是不完整的查询

    INSERT INTO e_ps(id,a_date_id,a_date_type,d_profile_id,c_id)
    SELECT '',a.id,'A',dp.id,'67' FROM d_profiles dp
    INNER JOIN a_dates a ON {HERE I NEED NAME MATCHING WITH c_types name} = dp.name and dp.profile_type = 'A'
    INNER JOIN a_dates ON a.id = a_dates.id
    LEFT OUTER JOIN e_ps eps ON eps.a_date_type = 'A' AND eps.a_date_id = a_dates.id
    WHERE eps.a_date_id IS NULL

1 个答案:

答案 0 :(得分:0)

这似乎是一个相对简单的JOIN: -

INSERT INTO e_ps(id, a_date_id, d_profile_id)
SELECT NULL, a_dates.id, d_profiles.id
FROM a_dates
INNER JOIN b_types ON a_dates.id = b_types.a_date_id
INNER JOIN c_types ON b.c_type_id = c.id
INNER JOIN d_profiles ON c_types.name = d_profiles.name

有了连接,有几种类型,我怀疑你会感到困惑。简言之: -

  • 使用INNER JOIN,它会查找BOTH表上的匹配项。如果不 匹配没有记录返回。
  • 使用LEFT OUTER JOIN,它会从左侧的表中获取记录 并在右边的桌子上查找匹配项。如果一场比赛很棒, 但如果没有,那么它仍会带回一行但是来自的列 右边的表只有NULL值。
  • 一个正确的外部联接与表格非常相似 逆转(包括我在内的大多数人都避免使用它,因为它没有 大部分时间都有优点,但只是让事情变得混乱)。
  • 使用FULL OUTER JOIN,无论是从哪一方获取记录 他们匹配与否。如果它们匹配则两者的列都是 返回,如果不匹配则返回一列中的列。不 MySQL不支持FULL OUTER JOIN(尽管有 模仿它的方法)。
  • CROSS JOIN加入2个表的每个组合。这些用于何时 没有可匹配的常用列,但您需要所有组合。 例如,如果您想要一张包含所有员工和所有员工的表格 每个员工的一周,你将交叉加入一天的表 本周针对员工表(然后是您可能获得的有用数据) LEFT OUTER加入假期表到结果)。