Mysql 插入到,选择DISTINCT-忽略重复的键条目
很简单。。。我有一个包含现有主键值的songs表,其中一些主键值已经存在于iTunesImport表的songsID列中 该命令的要点是将iTunesImport表中的新值添加为songs表中的新条目 我读过很多例子,他们说要使用以下语法,唯一的区别是我需要使用SELECT DISTINCT,因为iTunesImport表中有多个给定songsID值的实例 执行时,它返回0行,并且歌曲表没有更改 下面是我的表格部分Mysql 插入到,选择DISTINCT-忽略重复的键条目,mysql,sql,select,insert-into,on-duplicate-key,Mysql,Sql,Select,Insert Into,On Duplicate Key,很简单。。。我有一个包含现有主键值的songs表,其中一些主键值已经存在于iTunesImport表的songsID列中 该命令的要点是将iTunesImport表中的新值添加为songs表中的新条目 我读过很多例子,他们说要使用以下语法,唯一的区别是我需要使用SELECT DISTINCT,因为iTunesImport表中有多个给定songsID值的实例 执行时,它返回0行,并且歌曲表没有更改 下面是我的表格部分 songs ID, varchar(15), Not NULL Name
songs
ID, varchar(15), Not NULL
Name, varchar(200), Not NULL
SongType, varchar(200), NULL
Description, varchar(1000), NULL
DebutDate, date, NULL
TimeStamp, timestamp, Not NULL
有以下行
2nd 2nd Self Original NULL NULL 2014-03-11 18:46:40
3xwide The Triple Wide Original NULL NULL 2014-03-11 18:46:40
40s 40's Theme Original NULL NULL 2014-03-11 18:46:40
ahab Ahab Original NULL NULL 2014-03-11 18:46:40
allintime All in Time Original NULL NULL 2014-03-11 18:46:40
我的iTunesImport表
此表中还有其他列,但在本例中它们并不相关
13 p013 stew "Der Bluten Kat"
14 p013 stew "Der Bluten Kat"
15 p013 stew "Ocean Billy"
16 p014 tinkles Miss Tinkle's Overture
17 p014 wws Women Wine and Song >
18 p014 utopian Utopian Fir >
19 p014 katstune Kat's Tune >
20 p014 utopian Utopian Fir
21 p014 billy Ocean Billy >
22 p014 blacksabbath Black Sabbath >
23 p014 warpigs War Pigs >
24 p014 billy Ocean Billy
25 p014 pequod The Pequod >
26 p014 ahab Ahab >
27 p014 pequod The Pequod >
28 p014 andy Andy's Last Beer
29 p014 mulche Mulche's Odyssey
30 p015 dumpcity Dump City
我以前从未见过你的WHERE子句。你确定这是对的吗?我认为以下几点更有意义
INSERT INTO songs(ID)
SELECT DISTINCT songsID FROM iTunesImport
WHERE (NOT ISNULL(songsID))
ON DUPLICATE KEY UPDATE ID = ID
那么:
INSERT INTO songs(ID)
SELECT DISTINCT songsID FROM iTunesImport
WHERE (songsID IS NOT NULL)
AND songsID NOT IN (SELECT ID FROM songs)
您可以发布这些表中每个表的行的示例,以及每个表的SHOW CREATE TABLE输出,以便我们可以查看所有索引吗?例如,如果两者都有递增Id,并且它们重叠或都从1开始,则不会看到太大的差异。如果从iTunesImport i运行SELECT DISTINCT i.songsID(从iTunesImport i选择不同的i.songsID,其中i.songsID不为NULL且不存在),会发生什么情况?从歌曲s中选择1,其中s.Id=i.songsID?如果没有结果,那么您就没有任何新记录可插入到歌曲表中。它似乎产生了所有正确的结果。什么是i和s?我无法将它集成到我的INSERT语句查询中。。。插入songsID从iTunesImport i中选择不同的i.songsID,其中i.songsID不为NULL且不存在从歌曲s中选择1,其中s.Id=i.songsID。。。提出了错误。。。键“Song Name”的重复条目。。。。我甚至不想影响你,你从来没听说过的是空的?请看这里:是什么让您认为您的脚本会产生不同的结果?它仍然返回一个空的set1062-键'Song Name'的重复项我只需在我的INSERT语句中添加另一列,这样歌曲。名称项就不是空的,因此是重复的…INSERT INTO songsID,Name SELECT DISTINCT songsID,iTunesImport中的TrackName,其中songsID不为NULL,songsID不在“从歌曲中选择ID”中
INSERT INTO songs(ID)
SELECT DISTINCT songsID FROM iTunesImport
WHERE (NOT ISNULL(songsID))
ON DUPLICATE KEY UPDATE ID = ID
INSERT INTO songs(ID)
SELECT DISTINCT songsID FROM iTunesImport
WHERE (songsID IS NOT NULL)
AND songsID NOT IN (SELECT ID FROM songs)