加入派生表

时间:2014-01-30 16:04:11

标签: mysql inner-join

编辑:我正在使用phpMyAdmin接口,我已经将phpMyAdmin中的代码复制/粘贴到此处。 phpMyAdmin似乎运行“不同的代码”,因为我运行以下代码,并生成一些引用“不同代码”的错误消息,导致巨大的混乱。

**最终编辑:似乎Safari正在造成这种情况:当我尝试在下面运行第二个查询时,它会运行“不同的查询”。请改用Firefox,它会生成正确的结果。感谢您的帮助和对不起的困惑。 **

我有两个表:newsFeeds,comments,where

** newsFeeds包含列PID,注释包含列FID。**

我想在两个匹配PID = FID的表中连接行。我的代码是:

SELECT * FROM newsFeeds
INNER JOIN
(
    SELECT * FROM
    comments
)
ON comments.FID = newsFeeds.PID

,错误消息是“#1248 - 每个派生表必须有自己的别名”。

然后根据此处的其他帖子,在AS newtb之后添加)。然后代码是:

SELECT * FROM newsFeeds
INNER JOIN
(
    SELECT * FROM
    comments
) AS newtb
ON newtb.FID = newsFeeds.PID

但是出现了另一个错误:#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'INNER JOIN( SELECTFID,COUNT(*) AScount FROMcomments LIMIT 0, 25' at line 8

我想知道如何正确地做到这一点?

1 个答案:

答案 0 :(得分:2)

您应该通过删除派生表来更正此问题:

SELECT *
FROM tb_1 INNER JOIN
     tb_2
     ON tb_2.FID = tb_1.PID;

MySQL倾向于实现派生表,这会损害性能。

但问题的答案是在括号后添加一个名称:

SELECT *
FROM tb_1 INNER JOIN
     (SELECT *
      FROM tb_2
     ) t2
     ON t2.FID = tb_1.PID;