关于将5张桌子加在一起很困惑

时间:2014-11-17 07:50:21

标签: mysql sql join

SELECT p1.id, 
        p2.id, 
        p3.id, 
        p4.id, 
        p5.id 
FROM social_media_mareketing_blog p1 
    INNER JOIN social_engine_mareketing_blog p2 ON p1.id = p2.id 
    INNER JOIN branding p3 ON p2.id = p3.id 
    INNER JOIN strategy p4 ON p3.id = p4.id 
    INNER JOIN mobile_marketing p5 ON p4.id = p5.id 
WHERE p1.id = '1' LIMIT 0 , 30 

这个查询可以在MySQL中加入5个表吗?

1 个答案:

答案 0 :(得分:0)

查询在语法上是正确的。仅限:您通常不会为不同的表使用相同的ID。在您的查询中,您找到id为1的记录,然后在下一个表中查找id为1的记录,依此类推。只显示结果中的那些(和两个等)。我敢说这没有多大意义。

此外,你总会首先考虑你想要展示的内容。你真的对所有五张桌子的组合感兴趣吗?或者您是否希望显示移动营销存在的行(例如,您最好使用EXISTS子句而不是连接)。另外:其他表中是否总会有匹配的记录?否则你将不得不使用外连接表,而不是使用内部连接。

最后两个侧面评论:你通常不会在没有指定订单的情况下限制你的结果,但我想这只是为了测试目的,对吧?为了便于阅读,您可以使用有意义的别名,例如mb用于媒体博客,eb用于引擎块(或任何你喜欢的;可能是smmb用于social_media_mareketing_blog),而不是a,b,c,d或p1,p2 ,p3,p4。

以下是典型查询的示例:

SELECT 
  mb.blog_id, 
  mb.id, 
  mb.content,
  eb.id,
  eb.content,
  ...
FROM social_media_mareketing_blog mb
LEFT JOIN social_engine_mareketing_blog eb ON eb.blog_id = mb.blog_id
...
WHERE mb.id = '1'
AND EXISTS
(
  select *
  from mobile_marketing mm
  where mm.marketing_id = mb.marketing_id
);