我有一个包含1列的简单表,我尝试使用带有insert和SELECT的查询插入一些内容。
INSERT INTO workloadtable (test)
SELECT DISTINCT a.test FROM runtable a
WHERE a.test = "awesome_testcase"
AND NOT EXISTS(SELECT b.test FROM workloadtable b WHERE b.test = a.test)
现在我遇到的问题是,这个查询插入了“runtable”中存在的4000多个测试用例,而忽略了DISTINCT语句。我还尝试在WHERE语句之后删除DISTINCT并添加GROUP BY a.test。
如果我只运行SELECT查询,我只得到一个结果,在本例中是“awesome_testcase”,我不知道为什么当它放在INSERT语句中时会有不同的行为。
我还想提一些其他的事情。查询的运行方式与我前面提到的在使用phpMyAdmin的linux机器上的运行方式类似。我在一台windows机器(不带phpMyAdmin)上尝试了相同的查询,使用了相同的数据库,它运行得很好。。。只插入一行,而不是4000行。
如果将列设置为主键,则在尝试查询时显然会出错。Windows计算机上不会发生这种情况。
我肯定我在这里遗漏了什么,但我不知道是什么。
编辑:
以不同的方式尝试过-同样的问题
insert into workloadtable (test)
select distinct a.test from runtable a
where a.test = "ST.WORKLOAD.REL.THN"
and 0 = (select count(b.test) from workloadtable b where b.test = a.test)
编辑2:
机器上的MySql版本不一样。运行5.5和Windows5.6的Linux。但无法更改版本,因为这将使其他事情复杂化。
我还尝试使用控制台而不是phpMyAdmin UI,但问题仍然存在。
最佳答案
生成临时表以解析查询中的圆:
CREATE TEMPORARY TABLE myTemp
(SELECT DISTINCT a.test as test FROM runtable a
WHERE a.test = "awesome_testcase"
AND NOT EXISTS(SELECT b.test FROM workloadtable b WHERE b.test = a.test));
INSERT INTO workloadtable (test)
SELECT test FROM myTemp
DROP TEMPORARY TABLE myTemp
关于mysql - MySql INSERT忽略DISTINCT选择,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26383709/