2013-10-23 79 views
0

语法错误在下面的代码中显示为“as t3”。 我试图完全外部连接2表,但由于MySQL没有完全连接,即时通讯使用联合工会2左/右连接表。 对我来说,我无法找到任何语法错误什么那么,但它只是不会工作...为什么这个sql查询一直给我显示一个语法错误

SELECT 
    name, f.author_nameauthor_id, c1, c2 
FROM 
(
    SELECT 
      author_id, c1, c2 
    FROM 
    (
     (SELECT 
       author_id, amount AS c1 
     FROM Author_Keyword_Count 
     WHERE keyword_id=19478) AS t1 

     LEFT OUTER JOIN 

     (SELECT 
       author_id, amount AS c2 
     FROM Author_Keyword_Count 
     WHERE keyword_id=33944) AS t2 

     ON author_id=author_id 
    ) 
    UNION 
    (
     (SELECT author_id, amount AS c1 FROM Author_Keyword_Count WHERE keyword_id=19478) AS t3 
     RIGHT OUTER JOIN 
     (SELECT author_id, amount AS c2 FROM Author_Keyword_Count WHERE keyword_id=33944) AS t4 
     ON author_id=author_id 
    ) 
) AS f 

LEFT OUTER JOIN Author ON author_id=id; 
+0

为什么你给你的子查询别名,然后不使用它们来引用它们的列? –

+1

我认为联盟是错位的。 – Asenar

+0

@marc_s jeesh男人,不需要生气。有什么大不了的?你可以“礼貌地”说同样的话,并得到同样的信息。如何使用???和!让你的观点更好? –

回答

0

一些观察包含下面...

SELECT name 
    , f.author_nameauthor_id 
    , c1 
    , c2 
    FROM 
    (SELECT author_id 
      , c1 
      , c2 
     FROM 
      ( !-- <-- something missing here!?! 
        (SELECT author_id 
         , amount c1 
         FROM Author_Keyword_Count 
        WHERE keyword_id = 19478 
       ) t1 
       LEFT 
       JOIN 
        (SELECT author_id 
         , amount c2 
         FROM Author_Keyword_Count 
        WHERE keyword_id = 33944 
       ) t2 
       ON author_id = author_id !-- <-- which author id equals which other author id!?!? 
      ) 
     UNION 
      ( !-- <-- something missing here!?!? 
       (SELECT author_id 
         , amount c1 
        FROM Author_Keyword_Count 
        WHERE keyword_id = 19478 
       ) t3 
      RIGHT 
      JOIN !-- for ease of conceptualising, consider restructuring your logic to use a LEFT JOIN instead of a RIGHT JOIN 
       (SELECT author_id 
         , amount c2 
        FROM Author_Keyword_Count 
        WHERE keyword_id = 33944 
       ) t4 
       ON author_id = author_id !-- <-- which author id equals which other author id!?!? 
      ) 
    ) f 
    LEFT 
    JOIN Author 
    ON author_id = id; !-- <-- which author id equals which id!?!? 

Conceptally,你写(SELECT 'x') a JOIN (SELECT 'y') b这是(我认为)无效。你可以写SELECT * FROM (SELECT 'x') a JOIN (SELECT 'y') b,但也许有一个更优雅的方式来构建这个查询 - 只要我们知道你实际上想要做什么。

+0

您在连接列上需要别名。 '例如:t.author_id = t1.author_id' –

+0

@rs他们不是*我的*列! ;-) – Strawberry

相关问题