很难从您的描述中准确推断出您的意思。如果您展示了几条示例线条,那么这将有所帮助,您需要包含一条线路,并且希望将其排除在外。
但是,您可以在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或列的其他子集中的一行。
嗨我只想有一个空行,因为该表被用作另一个表中的外部字段。我已经尝试了以下内容,但它仍然插入空白行并且都是相同的记录。我只需要其中一行。 – tjhack
插入到联系人(名,姓,职位,电话号码,电子邮件地址,注册日期) 选择不同的Import.FirstName,Import.SecondName,Import.JobTitle,Import.ContactTelNumber,Import.EmailAddress,Import.RegistrationDate FROM Import WHERE NOT EXISTS (SELECT 1 FROM Contact WHERE Contact.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