编辑:我正在使用 phpMyAdmin 界面,并且我已经将代码从 phpMyAdmin 复制/粘贴到此处。当我运行以下代码时,phpMyAdmin 似乎运行了一个“不同的代码”,并生成了一些引用该“不同代码”的错误消息,造成了巨大的混乱。
** 最终编辑:似乎是 Safari 造成的:当我尝试运行下面的第二个查询时,它运行“不同的查询”。改用 Firefox,它会生成正确的结果。感谢您的帮助,并对造成的混乱表示抱歉。**
我有两个表:newsFeeds、comments、where
** newsFeeds 包含列 PID,comments 包含列 FID。**
我想用匹配的 PID = FID 连接两个表中的行。我的代码是:
SELECT * FROM newsFeeds
INNER JOIN
(
SELECT * FROM
comments
)
ON comments.FID = newsFeeds.PID
Run Code Online (Sandbox Code Playgroud)
错误消息是“#1248 - 每个派生表都必须有自己的别名”。
然后我加入AS newtb后,)根据这里的其他职位。然后代码是:
SELECT * FROM newsFeeds
INNER JOIN
(
SELECT * FROM
comments
) AS newtb
ON newtb.FID = newsFeeds.PID
Run Code Online (Sandbox Code Playgroud)
但是出现了另一个错误: #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
我想知道如何正确地做到这一点?
您应该通过删除派生表来更正此问题:
SELECT *
FROM tb_1 INNER JOIN
tb_2
ON tb_2.FID = tb_1.PID;
Run Code Online (Sandbox Code Playgroud)
MySQL 倾向于物化派生表,这会损害性能。
不过,您的问题的答案是在括号后添加一个名称:
SELECT *
FROM tb_1 INNER JOIN
(SELECT *
FROM tb_2
) t2
ON t2.FID = tb_1.PID;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5141 次 |
| 最近记录: |