我有一个看起来像这样的表:
CREATE TABLE `relations` (
`idA` VARCHAR(20),
`idB` VARCHAR(20).
PRIMARY KEY (idA,idB)
)
TYPE=MyISAM;
它基本上只是从另一个表中将两个ID映射到一起,如下所示:
CREATE TABLE `scores` (
`id` VARCHAR(20) PRIMARY KEY,
`score` INT(10) UNSIGNED NOT NULL DEFAULT ‘0’,
`friendsids` VARCHAR(1000)
)
TYPE=MyISAM;
所以 - 如果我想在关系表中添加一些内容,我会查询
INSERT IGNORE INTO relations VALUES ('$idA', '$idB')
所以问题 - 它有时会创建具有相同信息但在idA和idB之间交换的条目。例如,如果一个条目是idA = 1,idB = 2 - 我不想要一个看起来像idA = 2,idB = 1的条目;
我试过了:
INSERT IGNORE INTO relations VALUES ('$idA', '$idB') WHERE NOT EXISTS (SELECT * WHERE idA IS '$idB' AND idB IS '$idA');
它给我一个语法错误,我在某种程度上无法弄清楚:
Query failed: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IGNORE INTO relations VALUES ('saubua', 'deppata') WHERE NOT EXISTS (SELECT * WH' at line 1
我有可能完全错误地使用它吗?有更简单的方法吗?
答案 0 :(得分:0)
INSERT INTO relations
SELECT '$idA','$idB'
FROM dual
WHERE NOT EXISTS (SELECT idA
FROM relations
WHERE (idA='$idA' OR idB='$idB')
OR (idA='$idB' OR idB='$idA')
)
答案 1 :(得分:0)
所以 - 我拿了Akhils代码并对其进行了修改,所以很热它的工作原理:
INSERT IGNORE INTO relations SELECT '$idA','$idB' FROM dual WHERE NOT EXISTS (SELECT idA FROM relations WHERE (idA='$idB' AND idB='$idA') )
谢谢大家! :)