代码之家  ›  专栏  ›  技术社区  ›  David W.

在不必先查找另一个表中的值的情况下执行SQL插入

  •  1
  • David W.  · 技术社区  · 15 年前

    假设我有两张桌子:

    • 全国公共英语等级考试

    这个 SPECIES 表有两列:

    • ID-物种ID号
    • 描述-物种描述(狗、猫、龟等)

    这个 PETS 表有两列:

    • 名称-宠物的名称
    • 物种A链接到 ID 领域 桌子

    如果我想要一份宠物名单 FLUFFY 谁是猫,我可以在 单个SQL语句 :

    select *
    from NAME, SPECIES
    where PETS.NAME = 'FLUFFY' 
        and SPECIES.DESCRIPTION = 'CATS'
        and PETS.SPECIES = SPECIES.ID
    

    现在,我有了一只新宠物, BOWSER 谁是狗?我想说这样的话:

    INSERT INTO PETS
        (PETS.NAME, SPECIES.DESCRIPTION)
    VALUES
        ('BOWSER', 'DOG')
    

    是的,我知道我可以先找到 SPECIES.ID 对于 DOG ,然后插入:

    my $species = $sql.execute(select ID from SPECIES where description = 'DOG');
    insert into PETS (NAME, SPECIES)
    values ('BOWSER', '$species')
    

    但是,我想在 单个SQL语句 我可以用很多方法回答我的问题。有可能吗?

    3 回复  |  直到 15 年前
        1
  •  3
  •   Jonathan Leffler    15 年前

    如何:

    INSERT INTO Pets(Name, Species)
        SELECT 'Bowser' AS Name, ID AS Species
          FROM Species
         WHERE Description = 'DOG';
    
        2
  •  2
  •   Adrian Smith    15 年前

    您可以使用如下子选择:

    INSERT INTO Pets (
        Name,
        Species
    ) VALUES (
        'Bowser',
        (SELECT Id FROM Species WHERE Description='Dog')
    )
    
        3
  •  0
  •   Alex    15 年前
    INSERT INTO PETS
    (
        NAME, 
        SPECIES
    )
    SELECT
        'BOWSER',
        ID
    FROM 
        SPECIES
    WHERE
        DESCRIPTION='DOG'