【问题标题】:MySQL error 1064 inner joinMySQL 错误 1064 内连接
【发布时间】:2017-01-29 21:32:20
【问题描述】:

我写了这个 SQL:

INSERT INTO registered (`idc`, `idp`, `date`)
SELECT 'idc' 
FROM course,registered
    INNER JOIN course c ON c.idc=registered.idc 
WHERE course.title='aaa',
      (SELECT `idp` FROM participant,registered
      INNER JOIN participant ON participant.idp=registered.idp WHERE 
      participant.username='mmm')

我得到这个错误:

1064 - 您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,以了解要使用的正确语法 靠近 ' (SELECT idp FROM 参与者,在第 4 行注册 INNER JOIN 参与者 ON pa'

【问题讨论】:

标签: mysql


【解决方案1】:

课程 idc int(11)PRI auto_increment 标题 varchar(200) UNI 详细信息文本 参与者 idp int(11)PRI 自动增量 名字 varchar(50) 姓氏 varchar(50) 用户名 varchar(100)UNI 挂号的 idc int(11) 无符号 PRI idp int(11) 无符号 PRI 日期日期

【讨论】:

    【解决方案2】:

    你可能想尝试这样的事情,在它之后设置一个父 SELECT 和另外两个 SELECT 语句......

    INSERT INTO registered (idc, idp, date) 
      SELECT 
        (SELECT 'idc' FROM course, registered INNER JOIN course c ON c.idc=registered.idc WHERE course.title='aaa'), 
        (SELECT idp FROM participant,registered INNER JOIN participant ON participant.idp=registered.idp WHERE participant.username='mmm');
    

    此外,您可能还需要设置“日期”。如果它是根据该列的定义自动设置的,则可以省略:

    INSERT INTO registered (idc, idp)...
    

    【讨论】:

      【解决方案3】:

      您的插入语句需要 3 个值:(idc,idp,date) 但您的选择语句只提供一个:SELECT 'idc'

      您应该将您的查询重新定义为:

      INSERT INTO registered (`idc`, `idp`, `date`)
      SELECT course.idc, participant.idp, <HERE A DATE> 
      FROM registered
          INNER JOIN course ON course.idc = registered.idc
          INNER JOIN participant ON participant.idp = registered.idp
      WHERE 
          course.title = 'aaa'
          and participant.username = 'mmm';
      

      但是您的 INSERT 语句需要一个日期字段作为第三个字段,您必须提供它。

      【讨论】:

      • 每次我找到解决方案时都会出现一个新错误!!
      • 你的select语句应该基本返回3个字段。
      • 我的目标是在表中插入注册的 idc 和 idp 或者标题是唯一的('aaa'),并且参与者的用户名是'mmm'
      • 你能发布你的表架构吗?
      • 课程 idc int(11)PRI auto_increment title varchar(200) UNI 详细信息 text 参与者 idp int(11)PRI auto_increment firstname varchar(50) lastname varchar(50) username varchar(100)UNI 注册 idc int(11) unsigned PRI idp int(11) unsigned PRI date date
      猜你喜欢
      • 2018-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-11
      • 2015-07-03
      • 1970-01-01
      • 2012-01-27
      • 2011-04-17
      相关资源
      最近更新 更多