首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我已将用于视图的SQL查询添加到mySQL并接收错误1064。

问我已将用于视图的SQL查询添加到mySQL并接收错误1064。
EN

Stack Overflow用户
提问于 2014-03-24 15:26:48
回答 1查看 48关注 0票数 0

我已将用于视图的SQL查询添加到MySQL并接收错误1064。

下面是我添加的SQL

代码语言:javascript
复制
SELECT field_data_field_session_start_date.delta AS field_data_field_session_start_date_delta, field_data_field_session_start_date.entity_id AS date_id_date_filter, field_data_field_session_start_date.delta AS date_delta_date_filter, node.title AS node_title, node.nid AS nid, node.language AS node_language, field_data_field_session_start_date.field_session_start_date_value AS field_data_field_session_start_date_field_session_start_date, 'node' AS field_data_field_session_start_date_node_entity_type
FROM 
{node} node
LEFT JOIN {field_data_field_session_start_date} field_data_field_session_start_date 
ON node.nid = field_data_field_session_start_date.entity_id AND (field_data_field_session_start_date.entity_type = 'node' AND field_data_field_session_start_date.deleted = '0')
WHERE (( (node.status = '1') )AND(( (DATE_FORMAT(field_data_field_session_start_date.field_session_start_date_value, '%Y-%m-%d') > '2014-03-24') )))
ORDER BY field_data_field_session_start_date_field_session_start_date ASC
LIMIT 3 OFFSET 0

为什么会发生这样的错误?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-24 18:03:20

对于MySQL,不要将标识符括在大括号“{ }”中。(MySQL确实允许将大括号作为一些奇怪的外部联接语法{OJ }的一部分,但实际上没有调用使用该语法。1064消息的实际文本显示了MySQL看到问题的语句中的实际位置。(通常情况下,这并不是真正问题所在的地点,但这是一条线索。)

您的SQL语句很难破译;没有人能读懂它。

WHERE子句中所有不必要的括号并不能消除任何歧义,它们只是增加了混淆。

奇怪的是,您的查询指定了一个外部联接,但是联接的“外部性”被WHERE子句中的谓词所否定,因此它实际上是一个内部联接。这是误导。

更短的表别名确实可以使SQL更容易阅读,或者至少更容易被解密。

在另一个注意事项上,要启用索引用于日期时间列的范围扫描,请不要用函数包装日期列.这将禁用MySQL使用索引范围扫描的能力。

例如,MySQL不能使用索引范围扫描操作来满足以下谓词:

代码语言:javascript
复制
 WHERE DATE_FORMAT( mydatetimecol, '%Y-%m-%d') > '2103-03-24'

但是MySQL可以使用索引范围扫描来满足以下等价条件:

代码语言:javascript
复制
 WHERE mydatetimecol >= '2103-03-24' + INTERVAL 1 DAY

假设这个SQL返回一个等价的结果集..。

代码语言:javascript
复制
SELECT f.delta      AS field_data_field_session_start_date_delta
     , f.entity_id  AS date_id_date_filter
     , f.delta      AS date_delta_date_filter
     , n.title      AS node_title
     , n.nid        AS nid
     , n.language   AS node_language
     , f.field_session_start_date_value AS field_data_field_session_start_date_field_session_start_date
     , 'node'       AS field_data_field_session_start_date_node_entity_type
  FROM `node` n
  JOIN `field_data_field_session_start_date` f
    ON f.entity_id = n.nid
   AND f.entity_type = 'node'
   AND f.deleted = '0'
   AND f.field_session_start_date_value >= '2014-03-24' + INTERVAL 1 DAY
 WHERE n.status = '1'
 ORDER
    BY f.field_session_start_date_value ASC
 LIMIT 3 OFFSET 0
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22613635

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档