【问题标题】:[34, 105] The expression is not a valid conditional expression[34, 105] 表达式不是有效的条件表达式
【发布时间】:2013-12-23 21:45:06
【问题描述】:

大家好,我收到了错误:

Exception Description: Syntax error parsing [SELECT u FROM Appointment U WHERE u.startDatetime BETWEEN :date1 AND :date2 INNER JOIN Users_appointment where u.ATTENDEES_USER_NAME LIKE :search]. 
[34, 105] The expression is not a valid conditional expression.

当我尝试运行查询时

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

我的想法是我在约会表中搜索一系列日期,然后查看 users_appointment 表中是否有匹配的用户名,如果有,则输出此

怎么了?

谢谢

【问题讨论】:

  • 您有 2 个 WHERE 子句。使用AND 操作将WHERE u.startDatetime BETWEEN :date1 AND :date2 移动到底部的WHERE 子句。 (仅供参考:您可能还缺少ON 子句)

标签: mysql sql jpql


【解决方案1】:

使用了错误的 SQL 语法。请检查 SQL 语法。您需要使用ON 添加一个JOINING 子句来告诉mysql 如何将约会表与users_appointment 表链接。我假设您在两个表中都有用户 ID 列。

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

【讨论】:

  • 谢谢我试过了,但现在得到错误Exception Description: Syntax error parsing [SELECT u FROM Appointment U INNER JOIN Users_appointment ON u.userid = users_appointment.useridWHERE u.startDatetime BETWEEN :date1 AND :date2 AND u.ATTENDEES_USER_NAME LIKE :search]. [57, 57] An identification variable must be defined for a JOIN expression
  • 不确定,但在useridWHERE 之间添加一个空格。目前在你的错误信息中是这样的useridWHERE
  • 谢谢,但我仍然收到错误“[57, 57] 必须为 JOIN 表达式定义标识变量”
猜你喜欢
  • 1970-01-01
  • 2019-07-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-17
  • 1970-01-01
  • 1970-01-01
  • 2021-04-05
相关资源
最近更新 更多