【发布时间】:2014-03-03 08:06:17
【问题描述】:
我有一张如下所示的表格:
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
有没有可能我完全走错了路?有没有更简单的方法?
【问题讨论】:
-
你能告诉我们你得到的实际错误吗?
-
您已经在 where 子句中指定了列名,并在第二次选择之前使用了 IN
-
@TaryEast:刚刚编辑了帖子,底部有错误
-
我会删除 1-2, 2-1 然后插入
-
@krishna: idaA 是列名,$idA 是我要添加的带有 id 的字符串。第二个 SELECT 是什么意思 - 只有一个?