0

我有一个关于 SQL 的问题。有一个包含 3 个字段的表。

  • ID(通过访问自动编号)
  • 名字(文字)
  • 姓氏(文字)

以下是数据

数据

ID   FirstName     LastName
============================
1    John          Chan
2    May           Wong
3    Tim           Leung

我想在表中插入名字和姓氏,但名字和姓氏不能与表中现有数据相同。例如,当我输入 John Lee 和 Tim Wong 时可以,但不输入 Tim Leung。

我可以使用 1 个 SQL 来完成这部分吗?非常感谢。

4

6 回答 6

2

假设 TSql:

INSERT INTO myTable (FirstName, LastName)
SELECT @FirstName, @LastName FROM myTable
WHERE NOT EXISTS (
    SELECT * FROM myTable 
    WHERE FirstName = @FirstName AND LastName = @LastName)

正如其他人所建议的那样,添加一个独特的约束来强制执行此规则是一个好主意。

于 2012-02-11T14:14:40.600 回答
0

不可以。但是您可以将名字和姓氏设置为唯一约束。

您还可以在插入之前检查是否存在具有相同名字和姓氏的任何行。

于 2012-02-11T14:12:14.743 回答
0

尝试: CREATE UNIQUE CLUSTERED INDEX index_name ON table_name (first_name, last_name); 或:在表名上创建唯一的非集群索引索引名(名字,姓氏);

于 2012-02-11T14:13:47.497 回答
0
if(mysql_num_rows(mysql_query("SELECT * FROM table WHERE last_name = 'Leung' and first_name = 'Tim'"))==0) { 
 //add the names 
}else{
    echo "First name - last name exists."
}

php风格。

于 2012-02-11T14:13:48.987 回答
0

是的。@bort 建议很好。但是,如果您想更新现有行并在一个 SQL 语句中插入新行,请查看合并语句。

http://dcx.sybase.com/1100/en/dbreference_en11/merge-statement.html

于 2012-02-11T14:18:47.200 回答
0

您必须为此创建一个INDEX请参阅 CREATE INDEX (Transact-SQL)

CREATE UNIQUE NONCLUSTERED INDEX uniqueName_Index 
       ON TableName (first_name, last_name);
于 2012-02-11T14:23:46.187 回答