SQL插入包含所有字段的条件

时间:2012-02-11 14:06:59

标签: sql sqlanywhere sql-insert

我对SQL有疑问。有一个有3个字段的桌子。

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

以下是数据

数据

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

我想在表中插入名字和姓氏,但第一个名字和姓氏必须与表格中的现有数据不同。例如,当我进入John Lee和Tim Wong时,这是可以的,但不是Tim Leung。

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

6 个答案:

答案 0 :(得分:2)

假设TSql:

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

正如其他人所说,添加一个唯一约束来强制执行此规则是一个好主意。

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

尝试: CREATE UNIQUE CLUSTERED INDEX index_name ON table_name(first_name,last_name); 要么: CREATE UNIQUE NONCLUSTERED INDEX index_name ON table_name(first_name,last_name);

答案 3 :(得分: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风格。

答案 4 :(得分:0)

是。 @bort建议没问题。但是,如果要更新现有行并在一个SQL语句中插入新行,请查看merge语句。

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

答案 5 :(得分:0)

您必须为此创建INDEXsee CREATE INDEX (Transact-SQL)

CREATE UNIQUE NONCLUSTERED INDEX uniqueName_Index 
       ON TableName (first_name, last_name);