【问题标题】:57, 57 An identification variable must be defined for a JOIN expression57, 57 必须为 JOIN 表达式定义标识变量
【发布时间】:2013-12-23 22:08:03
【问题描述】:

我收到了错误

[57, 57] An identification variable must be defined for a JOIN expression

尝试运行此查询时

    public String searchString = "test";

    public List<Appointment> appointmentRangeSearch(Date startdatetime, Date endDate) {
        Query q = em.createQuery("SELECT u FROM Appointment U INNER JOIN Users_appointment "
                + "ON u.userid = users_appointment.userid"
                + " WHERE u.startDatetime BETWEEN :date1 AND :date2 "
                + "AND u.ATTENDEES_USER_NAME LIKE :search");
//Query q = em.createQuery("SELECT u FROM Appointment U WHERE u.startDatetime BETWEEN :date1 AND :date2");
        q.setParameter("search", "%" + searchString + "%");
        q.setParameter("date1", startdatetime, TemporalType.TIMESTAMP);
        q.setParameter("date2", endDate, TemporalType.TIMESTAMP);
        return q.getResultList();
    }

这是什么原因造成的?怎么解决?

【问题讨论】:

    标签: mysql sql jpql


    【解决方案1】:

    也许,因为你有不同的表名:

    INNER JOIN Users_appointment

    users_appointment.userid

    【讨论】:

      【解决方案2】:

      没有发现任何错误...尝试将 U 设为小写并使用

      SELECT u.* FROM Appointment u....

      em.createQuery("SELECT u.* FROM Appointment u INNER JOIN Users_appointment "
                      + "ON u.userid = users_appointment.userid"
                      + " WHERE u.startDatetime BETWEEN :date1 AND :date2 "
                      + "AND u.ATTENDEES_USER_NAME LIKE :search");
      

      【讨论】:

      • u.* 部分可能是原因,虽然我对错误信息不熟悉
      • @FilipeSilva 可能是 SQL 编译器感到困惑,并认为第二个表没有别名......这很奇怪我刚刚测试过,因为它工作得很好,除非消息来自另一个脚本的一部分......我只能猜测。
      猜你喜欢
      • 1970-01-01
      • 2014-05-02
      • 1970-01-01
      • 1970-01-01
      • 2016-10-21
      • 1970-01-01
      • 1970-01-01
      • 2014-09-06
      • 2021-07-10
      相关资源
      最近更新 更多