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

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 

这似乎是一个相对简单的加入: –

 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表上的匹配项。 如果不匹配则返回no记录。
  • 使用LEFT OUTER JOIN,它从左侧的表中获取记录,并在右侧的表中查找匹配项。 如果一个匹配很好,但如果没有那么它仍然会返回一行,但右边的表中的列只有NULL值。
  • 一个正确的外部联接是非常相同的,只是反转表(大多数人包括我避免使用它,因为它在大多数时间没有优势,但只是让事情混乱)。
  • 通过FULL OUTER JOIN,它可以从两侧获取记录,无论它们是否匹配。 如果它们匹配则返回两者中的列,如果不匹配则返回一列中的列。 并不是说MySQL不支持FULL OUTER JOIN(虽然有办法模仿它)。
  • CROSS JOIN连接2个表的每个组合。 当没有要匹配的公共列但您想要所有组合时使用这些。 例如,如果您想要一个包含所有员工的表格以及每个员工的一周中的所有日子,那么您将与一个员工表交叉加入一周中的几天表(然后,对于有用的数据,您可以将LEFT OUTER JOIN一个假期表连接到结果)。