【问题标题】:SQL INSERT INTO statement.. Error, I am very new to SQLSQL INSERT INTO 语句.. 错误,我对 SQL 很陌生
【发布时间】:2014-11-07 07:36:36
【问题描述】:

我到处寻找答案,但找不到任何人,所以我求助于自己的帖子。这是大学作业。我正在使用 HeidiSQL。

这是我的代码

INSERT INTO 
loan(patronCode,bookCode,loanDate,dueDate)
VALUES 
(
SELECT
    patron.patronCode
WHERE
    patron.fname='Jacob' AND patron.lname='Simmons', 
SELECT
    book.bookCode
WHERE
    book.bookTitle='The Agony And The Empathy',
'2014-09-10',
'2014-10-01'
),
(
SELECT
    patron.patronCode
WHERE
    patron.fname='Jacob' AND patron.lname='Simmons', 
SELECT
    book.bookCode
WHERE
    book.bookTitle='Kevin Rudd: The Biography',
'2014-09-10',
'2014-10-01'
)
FROM

loan
INNER JOIN patron 
  ON loan.patronCode=patron.patronCode
INNER JOIN book
 ON loan.bookCode=book.bookCode;

这是我的错误信息:

SQL 错误 (1064):您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获取在 'SELECT 赞助人.patronCode 附近使用的正确语法 在哪里 第 5 行的赞助人.fname='Jacob' 和赞助人.lname='Si'

【问题讨论】:

    标签: mysql sql select insert where


    【解决方案1】:

    我相信 SELECT 语句的语法是:

    SELECT patronCode FROM tablename WHERE ....
    

    【讨论】:

    • OP 的说法有很多错误。
    • 我在移动设备上,所以只是看了一眼并阅读了错误声明。现在让我看看还有什么问题。
    【解决方案2】:

    插入语句需要采用以下形式:

    INSERT INTO TABLENAME(FIELDNAME1, FIELDNAME2...)
    VALUES('HARDCODED_VALUE1', 'HARDCODED_VALUE2'...)
    

    您已将其与带有 select 语句的插入逻辑混为一谈。看起来像这样:

    INSERT INTO TABLENAME(FIELDNAME1, FIELDNAME2...)
    SELECT Column1, Column2...
    FROM TABLENAME
    

    这里有 2 个不同的插入。也许它们可以与更多信息相结合。另外,您没有说明patronbook 是如何连接的,可能它们不是,所以我把连接排除在外。

    这是第一个,第二个可以在它之后进行图案化。

    INSERT INTO loan(patronCode,bookCode,loanDate,dueDate)
    SELECT patron.patronCode,book.bookCode,'2014-09-10','2014-10-01'
    FROM patron, book
    WHERE
      patron.fname='Jacob' AND patron.lname='Simmons'
      and book.bookTitle='The Agony And The Empathy'
    

    【讨论】:

    • 谢谢,解决了。显然,我有很多关于 SQL 的知识要学习,因为我真的不明白为什么没有内部连接语句就可以工作。
    • SQL89 语法(旧样式)以这种方式工作,连接发生在 where 部分。 SQL92 引入了inner join 语法。您将遇到的问题是,如果您有不止一位名叫 Jacob Simmons 的赞助人,或者不止一本名为“The Agony and the Empathy”的书,那么它会将 2 条记录插入到您的贷款表中。因此,请确保您的where 标准足够严格,可以为您提供正确数量的结果。 (只需先运行选择部分以确保这是您要插入的内容)
    • 为了澄清,你只是说,把赞助人表中的所有东西都给我,然后把它加入到书表中符合这些标准的所有东西上。因此,如果没有像您在贷款时拥有的匹配 ID,那么很容易获得比您想要的更多的东西。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-09
    • 1970-01-01
    相关资源
    最近更新 更多