【问题标题】:Mysql query does not return the columns of the 2nd joined tableMysql查询不返回第二个连接表的列
【发布时间】:2016-01-13 17:57:08
【问题描述】:

为什么下面的 sql 查询不返回名为 cmets 的第二个表的所有列,而只返回 wp_users 表的 ID 列?

SELECT ID FROM wp_users 
INNER JOIN (select * from wp_comments) as comments
ON ID = comments.user_id
WHERE comments.comment_type = 'user_course'

如果我将查询更改为以下语句,它应该可以正常工作,这意味着第一个和第二个表的所有列当然都匹配 WHERE 条件。

SELECT * FROM wp_users 
INNER JOIN (select * from wp_comments) as comments
ON ID = comments.user_id
WHERE comments.comment_type = 'user_course'

【问题讨论】:

  • SELECT ID FROM ... 按照您的要求进行操作。如果您想要其他任何东西,您也必须提出要求。
  • select ID, comments.* from...
  • 我指的是第一个查询示例。 ID = 返回正常,但我没有从第二个表中获得“select * from wp_cmets”的结果。为什么?
  • @Maverick 我在回答中添加了解释。看看吧。

标签: php mysql select inner-join


【解决方案1】:

您的查询无效。您在 INNER JOIN 内进行额外选择,创建新的临时表。然后你加入这个表。此临时表中的字段不会自动选择到查询结果中。您应该指定要选择的字段集。因此,您可以直接与wp_comments 表进行连接,并将该表中的所有字段添加到使用c.* 设置的结果字段中。所有查询应该是这样的:

SELECT w.id, c.* 
FROM wp_users w 
INNER JOIN wp_comments c on c.user_id = w.ID
   and c.comment_type = 'user_course'

【讨论】:

  • @Jay Blanchard 我已经添加了解释。
  • 好的,为什么在第二个示例中几乎相同的查询可以正常工作?
  • 第二个例子是什么意思?如果你的意思是你的例子,因为* 这意味着“从连接表中选择所有字段”。如果您在谈论我的示例,那么因为 c.* 这意味着表 c 中的所有字段(wp_comments 的别名)
  • 谢谢,我参考了我的例子。所以最后你说几句话:在第一个查询中,所有字段都被选中,但只显示 id 字段。在第二个示例中,还选择了所有字段并显示了所有字段。正确吗?
  • 我刚刚做了一些测试。看来我(这是你的建议)之前的结论是正确的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-02-24
  • 1970-01-01
  • 2012-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多