2013-12-20 69 views
1

我正在做一个从导入的表中插入并使用mysql将数据添加到多个表中。检查条目是否存在,而不是插入到mysql

基本上,当插入时有一些空字段,因为数据已从csv导入。

我想要做的是提取数据,而不是创建多个空条目。一个例子是添加没有条目的联系人。基本上我想在表中有一个条目可以绑定到表中的id。

我该怎么做?

我当前的代码是

Insert into Contact(FirstName, Surname, Position, TelephoneNo, EmailAddress, RegisteredDate) 

Select Distinct Import.FirstName, Import.SecondName, Import.JobTitle, 
       Import.ContactTelNumber, Import.EmailAddress, Import.RegistrationDate 
FROM Import 

这基本上进口权并不做任何检查,但我在哪里可以为这个附加检查?

回答

1

很难从您的描述中准确推断出您的意思。如果您展示了几条示例线条,那么这将有所帮助,您需要包含一条线路,并且希望将其排除在外。

但是,您可以在SELECT的WHERE子句中添加各种条件。例如,如果你只是想确保在导入至少一列非空,你可以这样做:

INSERT INTO Contact(FirstName, Surname, Position, TelephoneNo, 
    EmailAddress, RegisteredDate) 

SELECT DISTINCT FirstName, SecondName, JobTitle, 
       ContactTelNumber, EmailAddress, RegistrationDate 
FROM Import 
WHERE COALESCE(FirstName, SecondName, JobTitle, ContactTelNumber, 
    EmailAddress, RegistrationDate) IS NOT NULL 

COALESCE()是接受可变数量的参数的函数,并返回第一个非空参数。如果所有参数都为空,则返回null。所以如果我们合并所有的列,并且我们得到一个null,那么我们知道所有的列都是空的,并且我们排除了那一行。


回复您的评论:

好吧,这听起来像你想整排了一个唯一约束,你只想复制不违反唯一约束的行。做到这一点

一种方法是如下:

ALTER TABLE Contact ADD UNIQUE KEY (FirstName, Surname, Position, TelephoneNo, 
    EmailAddress, RegisteredDate); 

INSERT IGNORE INTO Contact(FirstName, Surname, Position, TelephoneNo, 
    EmailAddress, RegisteredDate) 

SELECT DISTINCT FirstName, SecondName, JobTitle, 
       ContactTelNumber, EmailAddress, RegistrationDate 
FROM Import; 

的INSERT忽略的手段,如果遇到像重复行的错误,不插入,但也不放弃对插入其他行。

唯一约束创建一个索引,因此根据表的大小,运行该ALTER TABLE需要一些时间。

此外,拥有包含许多列的密钥可能不切实际。索引的长度限制为16列,总长度为1000字节。不过,我希望您真正想要的是限制为每个EmailAddress或列的其他子集中的一行。

+0

嗨我只想有一个空行,因为该表被用作另一个表中的外部字段。我已经尝试了以下内容,但它仍然插入空白行并且都是相同的记录。我只需要其中一行。 – tjhack

+0

插入到联系人(名,姓,职位,电话号码,电子邮件地址,注册日期) 选择不同的Import.FirstName,Import.SecondName,Import.JobTitle,Import.ContactTelNumber,Import.EmailAddress,Import.RegistrationDate FROM Import WHERE NOT EXISTS (SELECT 1 FROM Contact WHERE Con​​tact.FirstName = Import.FirstName and Contact。姓= Import.SecondName和Contact.Position = Import.JobTitle \t \t \t \t \t和Contact.TelephoneNo = Import.ContactTelNumber和Contact.EmailAddress = Import.EmailAddress和Contact.RegisteredDate = Import.RegistrationDate) – tjhack

相关问题