首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >插入不存在的地方-没有主键

插入不存在的地方-没有主键
EN

Stack Overflow用户
提问于 2011-12-15 19:11:55
回答 4查看 17K关注 0票数 10

我有三个表:牙医,团体,和群齿链接。许多牙医通过群齿链接表链接到许多组。

因此,我试图进行一个查询,它将在其中插入行到groupdentlink中(将状态中的所有牙医与状态中的所有组连接起来),但前提是这些行还不存在。简而言之,我想添加新行,而不覆盖现有行或复制它们。

因此,查询的目的如下:

代码语言:javascript
复制
INSERT INTO groupdentlink (f_dent_id, f_group_id, f_schedule_id)
VALUES ('$_POST[id]', '$groupid', '$scheduleid')
WHERE NOT EXISTS ('$_POST[id]', '$groupid')

我在群组链接表中没有任何主键。

提前谢谢你!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-12-16 13:15:03

如果你真的想写你自己的(工作)查询。

代码语言:javascript
复制
INSERT INTO groupdentlink (
  f_dent_id, f_group_id, f_schedule_id
) SELECT 
    '$_POST[id]'  f_dent_id, 
    '$groupid'    f_group_id,
    '$scheduleid' f_schedule_id
FROM DUAL
WHERE NOT EXISTS (
  SELECT 1
  FROM `groupdentlink`
  WHERE 
    f_dent_id = '$_POST[id]' AND f_group_id = '$groupid'
  LIMIT 1 -- will stop mysql to stop searching after first match
)

..。但是MySQL可以帮你处理这一切!

您不需要主键来使MySQL为您处理这个问题,您应该在这两列的组合集中添加一个UNIQUE键约束。

查询将唯一键dent_group_uniq_key添加到groupdentlink

代码语言:javascript
复制
ALTER TABLE groupdentlink ADD UNIQUE KEY `dent_group_uniq_key` (
  f_dent_id, f_group_id
);

然后在查询中使用INSERT IGNORE

代码语言:javascript
复制
INSERT IGNORE INTO groupdentlink (
  f_dent_id, f_group_id, f_schedule_id
) VALUES (
  '$_POST[id]', '$groupid', '$scheduleid'
)

INSERT IGNORE将尝试将一行插入到您的表中,如果由于键约束而失败,它将表现为什么也不会发生。

票数 23
EN

Stack Overflow用户

发布于 2011-12-15 19:17:51

代码语言:javascript
复制
INSERT INTO groupdentlink (f_dent_id, f_group_id, f_schedule_id)
SELECT '$_POST[id]', '$groupid', '$scheduleid' FROM dual
WHERE NOT EXISTS (
  select * from groupdentlink 
  where f_dent_id='$_POST[id]'
  and f_group_id='$groupid'
)

我认为您可以在组合(f_dent_id,f_group_id)上创建一个复合主键,以确保。

票数 5
EN

Stack Overflow用户

发布于 2011-12-15 19:17:03

你快拿到了!可以使用select语句输入insert语句。就这么做吧:

代码语言:javascript
复制
INSERT INTO groupdentlink (f_dent_id, f_group_id, f_schedule_id)
SELECT '$_POST[id]', '$groupid', '$scheduleid'
WHERE 
    NOT EXISTS (
    select 
        1 
    from 
        groupdentlink 
    where 
        f_dent_id = $_POST[id] 
        and f_group_id = '$groupid'
    )
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8525333

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档