【问题标题】:HQL Subquery ProblemsHQL 子查询问题
【发布时间】:2013-11-25 18:27:49
【问题描述】:

每次我尝试运行此子查询时都会收到 HQL 错误。这种类型的查询应该在 SQL 中工作,对吧? HQL 如何以不同方式处理此类查询?

SELECT *
FROM Table
WHERE user_Id IN (
    SELECT a.user_Id
    FROM Table a
    WHERE a.color='Blue')

HQL 好像不支持 IN? 我收到一个错误:“无法识别 'SELECT' 附近的输入”

【问题讨论】:

    标签: sql hql


    【解决方案1】:

    在hql中如果要选择所有字段,有两种方法:

    1-您可以删除选择子句,例如:

     FROM Table
     WHERE user_Id IN (
        SELECT a.user_Id
        FROM Table a
        WHERE a.color='Blue')
    

    2-如果要使用select子句,必须使用别名:

    SELECT t
    FROM Table t
    WHERE t.user_Id IN (
        SELECT a.user_Id
        FROM Table a
    WHERE a.color='Blue')
    

    【讨论】:

      【解决方案2】:

      您的语法似乎不正确。试试这个:

      SELECT *
      FROM Table
      WHERE user_Id IN (
          SELECT a.user_Id
          FROM Table a
          WHERE a.color='Blue')
      

      【讨论】:

      • 这里有什么区别?我可能是错的(而且经常是错的),但我看不出有什么不同。
      • OP 有“FROM a.Table”(在 OP 编辑​​问题之前)......表别名的正确语法是“FROM Table a”,现在是问题所在。所以,没有区别!
      • 这就解释了!
      【解决方案3】:

      HQL 中没有“*”。只应存在别名。

      SELECT t
      FROM Table t
      

      HQL 支持“输入”。 另外,请确保 java 类字段名称是“user_Id”。您可能在此处使用了 DB 列名。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-02-10
        • 1970-01-01
        • 2011-07-20
        • 2014-07-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多