所以我的这个名为SAKAI_REALM_RL_FN的表有3个字段
这句话需要做的是,如果某个ROLE_KEY&的两个组合每个REALM_KEY都不存在FUNCTION_KEY,而不是插入。
我也有我用于单数插入的查询:
INSERT INTO `sakai`.`SAKAI_REALM_RL_FN` (`REALM_KEY`, `ROLE_KEY`, `FUNCTION_KEY`) VALUES (248620, 8, 308);
伪代码:
if(ROLE_KEY equals 8 and FUNCTION_KEY=308 don't exist for REALM_KEYS)
than insert ROLE_KEY=8 & FUNCTION_KEY=308
答案 0 :(得分:3)
INSERT INTO `sakai`.`SAKAI_REALM_RL_FN` (`REALM_KEY`, `ROLE_KEY`, `FUNCTION_KEY`)
SELECT *primaryKey*
FROM `sakai`.`SAKAI_REALM_RL_FN`
WHERE not exists (SELECT *primaryKey*
from `sakai`.`SAKAI_REALM_RL_FN`
where role_key = 8 and function_key = 308);
希望有帮助...
答案 1 :(得分:0)
如果您定义了正确的索引,RDBMS可以很好地处理这个问题。
您需要的是所有三个列中的复合UNIQUE
索引。当您执行INSERT IGNORE
时,如果该组合尚不存在,则会插入该组合。
请注意,如果表格中已有非唯一行,则会失败。
ALTER TABLE SAKAI_REALM_RL_FN ADD UNIQUE KEY `idx_unique_realm_role_function` (REALM_KEY, ROLE_KEY, FUNCTION_KEY)
然后INSERT
选择其他2列的所有REALM_KEY
值和静态值。如果值已存在,则忽略它们。否则,它们将与REALM_KEY
一起插入。
INSERT IGNORE INTO SAKAI_REALM_RL_FN (REALM_KEY, ROLE_KEY, FUNCTION_KEY)
/* SELECT within INSERT gets all REALM_KEY plus the 2 static values */
SELECT
REALM_KEY,
8,
308
FROM SAKAI_REALM_RL_FN
完成INSERT IGNORE
后,您可以放弃UNIQUE KEY
,因为可能不再需要它。
ALTER TABLE SAKAI_REALM_RL_FN DROP KEY `idx_unique_realm_role_function`
答案 2 :(得分:0)
我不太确定你想要什么,但这里有一些你可能会觉得有用的东西。
包含少量条目的架构:
CREATE TABLE ALOHA (
REALM_KEY VARCHAR(32) NOT NULL,
ROLE_KEY VARCHAR(32) NOT NULL,
FUNCTION_KEY VARCHAR(32) NOT NULL
);
INSERT INTO ALOHA VALUES ('1', '1', '1');
INSERT INTO ALOHA VALUES ('1', '1', '2');
INSERT INTO ALOHA VALUES ('1', '2', '1');
INSERT INTO ALOHA VALUES ('1', '2', '2');
INSERT INTO ALOHA VALUES ('1', '2', '3');
INSERT INTO ALOHA VALUES ('1', '2', '4');
尝试插入3个条目(只插入一个):
INSERT INTO ALOHA (REALM_KEY, ROLE_KEY, FUNCTION_KEY)
SELECT * FROM (
SELECT '1' AS REALM_KEY, '2' AS ROLE_KEY, '1' AS FUNCTION_KEY
UNION ALL
SELECT '1', '2', '3'
UNION ALL
SELECT '1', '2', '5'
) s
WHERE NOT EXISTS
(SELECT 1 FROM ALOHA a
WHERE a.ROLE_KEY = s.ROLE_KEY
AND a.REALM_KEY = s.REALM_KEY
AND a.FUNCTION_KEY = s.FUNCTION_KEY);