【问题标题】:MySQL : Insert Statement to add a record in TABLE_1MySQL:插入语句以在 TABLE_1 中添加记录
【发布时间】:2020-01-21 05:55:04
【问题描述】:

在 TABLE_1 中添加一条新记录的单个插入语句:

  1. TABLE_1_ID 值作为 TABLE_1 + 1 中的记录总数插入。
  2. COLUMN_NAME 的值为“ABC”。
  3. TABLE_2_ID 值应根据值从 TABLE_2 中选取 COLUMN_NAME 是“ABC”。
  4. TABLE_3_ID 值应根据值从 TABLE_3 中选取 COLUMN_NAME 是“ABC”。

以上所有指定的语句都必须使用单插入语句来完成。所有 3 个表的架构如下:

TABLE_1

COLUMN_NAME     COLUMN_TYPE     IS_NULLABLE     COLUMN_KEY     COLUMN_DEFAULT    
-----------    --------------  --------------  -------------   --------------                   
TABLE_1_ID      smallint(6)     NO              PRI            (null)                      
COLUMN_NAME     varchar(200)    YES                            (null)                      
TABLE_2_ID      smallint(6)     YES             MUL            (null)                      
TABLE_3_ID      smallint(6)     YES             MUL            (null)

表_2

COLUMN_NAME     COLUMN_TYPE     IS_NULLABLE     COLUMN_KEY     COLUMN_DEFAULT         
--------------  --------------  --------------  -------------  -----------------   
TABLE_2_ID      smallint(6)     NO              PRI            (null)                      
COLUMN_NAME     varchar(20)     YES                            (null)       

表_3

COLUMN_NAME     COLUMN_TYPE     IS_NULLABLE     COLUMN_KEY     COLUMN_DEFAULT         
--------------  --------------  --------------  -------------  -----------------   
TABLE_3_ID      smallint(6)     NO              PRI            (null)                      
COLUMN_NAME     varchar(20)     YES                            (null)   

【问题讨论】:

    标签: mysql sql


    【解决方案1】:
    INSERT INTO TABLE_1(TABLE_1_ID, COLUMN_NAME, TABLE_2_ID, TABLE_3_ID)
    SELECT COUNT(*) + 1, 'ABC', (SELECT TABLE_2_ID FROM TABLE_2 WHERE COLUMN_NAME = 'ABC'), (SELECT TABLE_3_ID FROM TABLE_3 WHERE COLUMN_NAME = 'ABC') FROM TABLE_1
    

    【讨论】:

    • 请尝试解释您的答案,以及为什么这可以说是最好的解决方案。
    • 我认为这不是最好的解决方案,但它是满足问题中提出的条件的解决方案。这种解决方案并不理想,至少有两个原因: 1. TABLE_1_ID 可能与 TABLE_1 中已经存在的 TABLE_1_ID 重合。更正确的解决方案是找到最大标识符 MAX(TABLE_1_ID) + 1。 2. 在 TABLE_2 和 TABLE_3 中可能有多个名称为“ABC”的条目。因此,最好将子查询限制为单个记录 LIMIT 1 的输出。
    • 感谢您的回答!您还可以通过编辑直接将您的观点包含在您的答案中,这样它就更明显了。再次感谢您对 Stackoverflow 的贡献 :)
    • 感谢 Eugene 和 dennlinger 在 cmets 上的写作,这使您的答案更加清晰。
    猜你喜欢
    • 2015-05-30
    • 1970-01-01
    • 2019-05-31
    • 1970-01-01
    • 2017-11-04
    • 1970-01-01
    • 2018-09-25
    • 2023-03-05
    • 1970-01-01
    相关资源
    最近更新 更多