我尝试将数据从#include<stdio.h>
#include<string.h>
#include<stdlib.h>
void removeDuplicates(char *);
void removeDuplicates(char *inp)
{
int i=0, j=0, FLAG=0, repeat=0;
while(inp[i]!='\0')
{
if(FLAG==1)
{
inp[i-repeat]=inp[i];
}
if(j==(j | 1<<(inp[i]-'\0')))
{
repeat++;
FLAG=1;
}
j= j | 1<<(inp[i]-'\0');
i++;
}
inp[i-repeat]='\0';
}
int main()
{
char inp[100] = "aaAABCCDdefgccc";
//char inp[100] = "ccccc";
//char inp[100] = "\0";
//char *inp = (char *)malloc(sizeof(char)*100);
printf (" INPUT STRING : %s\n", inp);
removeDuplicates(inp);
printf (" OUTPUT STRING : %s:\n", inp);
return 1;
}
复制到tbllicenseissued
MySQL表:
licenses
INSERT INTO `licenses` (UserID, TypeID, IssueDate, ExpirationDate)
SELECT UserID, TypeID, IssueDate, ExpirationDate FROM `tbllicenseissued`
有一个阻止传输的外键约束:licenses
是licenses.UserID
表中的主键
错误代码:1452
无法添加或更新子行:外键约束失败(
user
。test
,CONSTRAINTlicenses
FOREIGN KEY(UserID
)参考UserID
。main
(user
)ON UPETE CASCADE ON UPDATE CASCADE)
如果删除此键约束,操作会成功,因此我猜测我复制的数据包含id
表中找不到的ID。
我想复制符合约束条件的记录,同时忽略会引发错误的记录。我尝试用user
取代INSERT
无效。
附录
到目前为止,我已经尝试了答案中建议的所有问题,并且我在上面重试了我自己的INSERT IGNORE
。它们都给我相同的错误消息(上面更新以包含完整错误)。
我还确认,如果删除外键约束并尝试查询(在原始表的副本上),查询将成功运行。
要确认我怀疑INSERT IGNORE
UserID
中tbllicenseissued
遗漏了问题{/ 1}}:
user
共找到26条记录。表结构是:
SELECT UserID FROM `tbllicenseissued` a
WHERE a.UserID NOT IN (SELECT id FROM `user`);
DESCRIBE licenses
DESCRIBE tbllicenseissued
我刚检查并确认所有三个表都是DESCRIBE user
答案 0 :(得分:0)
您可以像这样使用,跳过具有损坏的用户ID约束的数据使用内部联接到用户表:
INSERT INTO `licenses` (UserID, TypeID, IssueDate, ExpirationDate)
SELECT UserID, TypeID, IssueDate, ExpirationDate FROM `tbllicenseissued` a
INNER JOIN User u ON a.UserID = u.UserID
答案 1 :(得分:0)
我假设你不想插入不匹配的行。如果是这样,你有两个解决方案。一个人在查询中进行检查:
INSERT INTO `licenses` (UserID, TypeID, IssueDate, ExpirationDate)
SELECT UserID, TypeID, IssueDate, ExpirationDate
FROM tbllicenseissued
WHERE UserId NOT IN (SELECT UserID FROM Users WHERE UserId IS NOT NULL);
我希望INSERT IGNORE
也可以解决问题:
INSERT IGNORE INTO `licenses` (UserID, TypeID, IssueDate, ExpirationDate)
SELECT UserID, TypeID, IssueDate, ExpirationDate
FROM tbllicenseissued;
但是,您的问题表明这不适合您。