Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 插入到,选择DISTINCT-忽略重复的键条目_Mysql_Sql_Select_Insert Into_On Duplicate Key - Fatal编程技术网

Mysql 插入到,选择DISTINCT-忽略重复的键条目

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表,其中一些主键值已经存在于iTunesImport表的songsID列中

该命令的要点是将iTunesImport表中的新值添加为songs表中的新条目

我读过很多例子,他们说要使用以下语法,唯一的区别是我需要使用SELECT DISTINCT,因为iTunesImport表中有多个给定songsID值的实例

执行时,它返回0行,并且歌曲表没有更改

下面是我的表格部分

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)