› MySQL 5.5 Community Server
› MySQL 5.6 Community Server
› Percona Configuration Wizard
› XtraBackup 搭建主从复制
Great Sites on MySQL
› Percona
› MySQL Performance Blog
› Severalnines
推荐管理工具
› Sequel Pro
› phpMyAdmin
推荐书目
› MySQL Cookbook
MySQL 相关项目
› MariaDB
› Drizzle
参考文档
› http://mysql-python.sourceforge.net/MySQLdb.html
HarryQu
V2EX  ›  MySQL

Mysql 查询遇到的一个问题,我错在哪里了 ?

  •  
  •   HarryQu · Oct 18, 2018 · 4308 views
    This topic created in 2898 days ago, the information mentioned may be changed or developed.

    查询问题卡了一个多个小时,特来求助 。

    两张表 : User 表 和 Order 表。 User 有多个 Order。 Order 只能有一个 User。

    代码如下图 : User 表 :

    Order 表 :


    需求 : 根据 User 的 id 返回 User 对象 。


    我使用的方法 : 直接通过 jpa 查询

       Optional<User> optional = userDao.findById(userId);
    

    遇到的问题 : 查询过程,直接报错 :

    Hibernate show sql :

    select user0_.id as id1_1_0_, 
     user0_.age as age2_1_0_,
     user0_.name as name3_1_0_, user0_.sex as sex4_1_0_,
     customer1_.user_id as user_id2_0_1_,
     customer1_.order_id as order_id1_0_1_,
     customer1_.order_id as order_id1_0_2_, 
     customer1_.user_id as user_id2_0_2_ from user user0_ left outer join order customer1_ on user0_.id=customer1_.user_id where user0_.id=?
    > 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'order customer1_ on user0_.id=customer1_.user_id where user0_.id=?' at line 7
    > Time: 0s
    
    
    
    15 replies  •  2018-10-19 14:37:56 +08:00
    allen9527
        1
    allen9527  
       Oct 18, 2018
    left outer join order 关键字了?
    moresteam
        2
    moresteam  
       Oct 18, 2018 via Android
    楼主可以表述的专业点吗。。
    moshao6
        3
    moshao6  
       Oct 18, 2018
    order 本身就是关键字 怎么会起这样的表名
    F281M6Dh8DXpD1g2
        4
    F281M6Dh8DXpD1g2  
       Oct 18, 2018
    保留字做表名,佩服
    zdt3476
        5
    zdt3476  
       Oct 18, 2018
    order 做表名导致的。。。 看下是否能用反引号包起来,`Order` 或者是换个名字
    oyosc
        6
    oyosc  
       Oct 18, 2018
    楼主新手?
    wuwuwu5
        7
    wuwuwu5  
       Oct 18, 2018
    换个表名,我以前还用 group 做过表名😢。
    metrxqin
        8
    metrxqin  
       Oct 18, 2018
    外键约束已经被业务唾弃。
    U7Q5tLAex2FI0o0g
        9
    U7Q5tLAex2FI0o0g  
       Oct 18, 2018
    我一般表名用复数
    users
    orders
    就不会与关键字冲突
    或者你的 sql 应该用 `user` 、 `order`
    johnniang
        10
    johnniang  
       Oct 18, 2018 via Android
    @littleylv JPA 没办法做到自动加上``
    PythonAnswer
        11
    PythonAnswer  
       Oct 18, 2018 via iPhone
    加下划线 这样能强迫自己记住关键字
    kslr
        12
    kslr  
       Oct 18, 2018 via Android
    复数哦同志
    947211232
        13
    947211232  
       Oct 19, 2018
    代码的话应该:
    @Table(name="order")
    改
    @Table(name="`order`"),

    关键词作表名、字段属性的话用``包括

    sql 的话应该:
    left outer join order customer1_ on user0_.id=customer1_.user_id where user0_.id=?
    改
    left outer join `order` customer1_ on user0_.id=customer1_.user_id where user0_.id=?


    LZ 有点瑕疵就是库名、表名、别名太乱
    nekoneko
        14
    nekoneko  
       Oct 19, 2018
    一般没个几年经验不敢用 JPA 或者 Hibernate 的映射
    HarryQu
        15
    HarryQu  
    OP
       Oct 19, 2018
    @moshao6 之前没有意识到这是一个关键字,只是把它当成 订单 - Order
    @metrxqin 因为我对 mysql 了解不深 , 图省事想通过级联更新和级联删除减少些数据库操作。查了点资料 , 猛的发现外键的局限性,谢谢提醒。
    @littleylv 好主意 , 我查了点资料 ,决定以 t_ 开头,避免这种错误。
    @947211232 我通过 jpa hibernate 操作 mysql 数据库,上面的 sql 语句是 hibernate 生产的,因此命名有有点乱 。
    @nekoneko 确实,细节都被封装起来,对于我这种新手,一不小心就踩坑了。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2515 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 74ms · UTC 01:22 · PVG 09:22 · LAX 18:22 · JFK 21:22
    ♥ Do have faith in what you're doing.