【问题标题】:how i left join value from select query as table?我如何将选择查询中的连接值保留为表?
【发布时间】:2023-03-20 13:00:02
【问题描述】:

我有 sql 查询来从多表中选择值。

我使用了 left join ,但我遇到了问题。

我想左连接另一个表,但问题是这个表名是关于同一个查询中列的值。

这是查询:

SELECT tags_assign.*,COUNT(*) AS total from tags_assign
  LEFT JOIN tags ON tags.id = tags_assign.tags_id 
  LEFT JOIN tags_assign.module module ON module.id = tags_assign.module_id 
  WHERE tags.name = 'music theory';

当我执行这个查询时,会出现这个错误:

SELECT 命令拒绝用户 'jason'@'62.100.08.01' 用于表 '模块' database_tags_assign.sql

请问我该如何解决这个问题?

【问题讨论】:

    标签: php mysql sql join left-join


    【解决方案1】:

    您通过身份验证的用户(您传递给connect 函数的用户)没有来自该数据库或表的SELECT 权限。您需要进入控制面板并授权用户名来执行此操作,或者您使用了错误的用户名/密码。

    【讨论】:

    • 查询工作我删除了这个“LEFT JOIN tags_assign.module module ON module.id = tags_assign.module_id”
    • 您是否有权访问tags_assign 数据库?有这样的数据库吗?或者你的意思是写left join tags_assign as module on module.id = module_id
    • 你好,我想从 sql 中使用 tags_assign.module 值作为左连接中的列,因为 tags_assign.module 是一个列,它的值是关于同一个数据库中的一个表,但我的问题在这里,该数据库将左连接中的 tags_assign.module 视为表名,因此它不会返回将其用作真实表名的值;
    【解决方案2】:

    我的猜测是所有表都在同一个数据库中,并且查询中有错字:

    SELECT tags_assign.*,COUNT(*) AS total from tags_assign
      LEFT JOIN tags ON tags.id = tags_assign.tags_id 
      LEFT JOIN tags_assign module ON module.id = tags_assign.module_id 
      WHERE tags.name = 'music theory'
    

    也就是说,不要使用tags_assign.module module,而是使用tags_assign module。'我的猜测是没有 tags_assign 数据库。

    【讨论】:

    • 你好,我想从 sql 中使用 tags_assign.module 值作为左连接中的列,因为 tags_assign.module 是一个列,它的值是关于同一个数据库中的一个表,但我的问题在这里,该数据库将左连接中的 tags_assign.module 视为表名,因此它不会返回将其用作真实表名的值;
    • MySql 不允许您在连接中动态指定表。您需要重新考虑如何表示数据。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-17
    相关资源
    最近更新 更多