仅当另一个表中存在id时才插入值

时间:2013-09-07 20:12:13

标签: php mysql sql insert

基本上,以下是我想要做的事情:

INSERT INTO table
(
    column1, column2
)
VALUES
(
    ?, ?
)
WHERE EXISTS
(
    SELECT 1
    FROM table2
    WHERE id = ?
)

换句话说:如果table2中存在一个id,则应插入值,否则不会发生任何事情。

此任务的正确语法是什么?

3 个答案:

答案 0 :(得分:2)

我发现这就是我需要的。

INSERT INTO table1
(
    column1, column2
)
SELECT ?, ?
FROM
table2
WHERE EXISTS
(
    SELECT 1
    FROM table2
    WHERE id = ?
)
LIMIT 1

答案 1 :(得分:2)

我没有可用的mysql数据库,但与其他数据库类似,在阅读引用后,它必须类似于

INSERT INTO table (column1, column2)
    SELECT ?, ? FROM table2 WHERE id=?

答案 2 :(得分:0)

我知道这是一个已经得到回答的老问题,但是我的一个朋友帮助建立了一个带有“约束”的数据库,其中插入或更新必须有1个值匹配来自不同表中的一个值完全相同的数据库,以便发射。

我对MySQL调用还不是很好,所以我不明白它究竟做了什么......但是它可以帮助你减少做你想要的代码所需的代码? (注意:我必须稍微修改它以删除一些敏感的名称及其类似的内容,但它应该是一个很好的表示。)

-- -----------------------------------------------------
-- Table `db1`.`table1`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `db1`.`table1` (
  `id` INT NOT NULL AUTO_INCREMENT ,
  `av_key` VARCHAR(40) NOT NULL ,
  PRIMARY KEY (`id`) )
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `db1`.`table2`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `db1`.`table2` (
  `bkid` INT NOT NULL AUTO_INCREMENT ,
  `id` INT NOT NULL ,
  `data` VARCHAR(6144) NULL ,
  PRIMARY KEY (`bkid`) ,
  INDEX `id_idx` (`id` ASC) ,
  CONSTRAINT `id`
    FOREIGN KEY (`id` )
    REFERENCES `db1`.`table1` (`id` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;

有了这个,你只需要执行insert / update语句,如果两个表中的“id”都不匹配,它就会失败。

不知道你是否已经发现或者这是否是你所需要的,但认为值得分享!