仅当其他表上不存在时才插入表中

时间:2013-03-24 15:24:16

标签: mysql sql

我正在尝试做以下事情: 我有两个表:ReportImage(imageId,reportId,counter)                    和userReportedImages(imageId,userId)

我希望每个用户只能报告一次图像 - 这意味着首先我要检查'userReportedImages'中是否有一行(valueId,userId),如果这样做什么都没有,否则创建'ReportImage'中的一行带有值(imageId,reportId,counter),如果这样的行已经存在(其他用户报告该图像),那么我想提高计数器。

在检查相同的用户报告之前,我有以下声明:

INSERT INTO ReportImage VALUES (imageId,reportId,1) ON DUPLICATE KEY UPDATE counter = counter+1

这句话工作正常。

我试图更改此语句以首先检查该行是否存在于另一个表中,但我没有设法执行此操作,您能帮助我吗?

3 个答案:

答案 0 :(得分:3)

首先,您需要在表UNIQUE上定义ReportImage约束或复合列主键,

ALTER TABLE ReportImage ADD CONTRAINT tb_uq UNIQUE(ImageID, ReportID)

尝试一下,

INSERT INTO ReportImage(ImageID, ReportID, Counter)
SELECT  'imageID HERE' AS ImageID,
        'userID HERE' AS ReportID,
        1 AS Counter
FROM    userReportedImages a
        LEFT JOIN ReportImage b
            ON  a.imageId = b.imageId AND
                a.userId = b.ReportID AND
                a.imageID = 'imageID HERE' AND
                a.userID = 'userID HERE'
WHERE   b.imageId IS NULL OR 
        b.ReportID IS NULL
ON DUPLICATE KEY UPDATE counter = VALUES(counter) + 1

答案 1 :(得分:0)

插入触发器应该是您的解决方案:link

答案 2 :(得分:0)

您可以尝试使用NOT EXISTS

insert into table2(`name`)
select * from (select 'name1' as name) tmp
where not exists(
  select ('x') from table1 where name = 'test1'
  );

SQL Fiddle