Вставка SQL с условиями для всех полей

У меня вопрос по SQL. Есть таблица с 3 полями.

  • ID (авто номер по доступу)
  • Имя (текст)
  • Фамилия (текст)

Ниже приведены данные

Данные

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

Я хочу вставить имя и фамилию в таблицу, но имя и фамилия не должны совпадать с существующими данными в таблице. Например, я могу ввести John Lee и Tim Wong, но не Tim Leung.

Могу ли я использовать 1 SQL, чтобы закончить эту часть? Большое спасибо.


person Dickson Lee    schedule 11.02.2012    source источник


Ответы (6)


Предполагая TSql:

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

Как предполагают другие, хорошей идеей является добавление уникального ограничения для обеспечения соблюдения этого правила.

person Bort    schedule 11.02.2012

Нет. Но вы можете установить имя и фамилию как уникальное ограничение.

Вы также можете проверить, есть ли какая-либо строка с тем же именем и фамилией перед вставкой.

person Bruno Costa    schedule 11.02.2012

Попробуйте: СОЗДАЙТЕ УНИКАЛЬНЫЙ КЛАСТЕРНЫЙ ИНДЕКС index_name ON table_name (first_name, last_name); или: CREATE UNIQUE NONCLUSTERED INDEX index_name ON table_name (first_name, last_name);

person hlysig    schedule 11.02.2012

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."
}

стиль пхп.

person Alice    schedule 11.02.2012

Да. @bort предлагает нормально. Но если вы хотите обновить существующие строки и вставить новые строки в один оператор SQL, взгляните на оператор слияния.

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

person Brian    schedule 11.02.2012

Для этого необходимо создать INDEX (см. CREATE INDEX ( Transact-SQL))

CREATE UNIQUE NONCLUSTERED INDEX uniqueName_Index 
       ON TableName (first_name, last_name);
person John Woo    schedule 11.02.2012