我有三个表:牙医,团体,和群齿链接。许多牙医通过群齿链接表链接到许多组。
因此,我试图进行一个查询,它将在其中插入行到groupdentlink中(将状态中的所有牙医与状态中的所有组连接起来),但前提是这些行还不存在。简而言之,我想添加新行,而不覆盖现有行或复制它们。
因此,查询的目的如下:
INSERT INTO groupdentlink (f_dent_id, f_group_id, f_schedule_id)
VALUES ('$_POST[id]', '$groupid', '$scheduleid')
WHERE NOT EXISTS ('$_POST[id]', '$groupid')我在群组链接表中没有任何主键。
提前谢谢你!
发布于 2011-12-16 13:15:03
如果你真的想写你自己的(工作)查询。
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。
ALTER TABLE groupdentlink ADD UNIQUE KEY `dent_group_uniq_key` (
f_dent_id, f_group_id
);然后在查询中使用INSERT IGNORE:
INSERT IGNORE INTO groupdentlink (
f_dent_id, f_group_id, f_schedule_id
) VALUES (
'$_POST[id]', '$groupid', '$scheduleid'
)INSERT IGNORE将尝试将一行插入到您的表中,如果由于键约束而失败,它将表现为什么也不会发生。
发布于 2011-12-15 19:17:51
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)上创建一个复合主键,以确保。
发布于 2011-12-15 19:17:03
你快拿到了!可以使用select语句输入insert语句。就这么做吧:
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'
)https://stackoverflow.com/questions/8525333
复制相似问题