SQL Вставить с условиями где для всех полей - PullRequest
0 голосов
/ 11 февраля 2012

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

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

Ниже приводитсяданные

данные

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

Я хочу вставить имя и фамилию в таблицу, но имя и фамилия не должны совпадать с существующими данными в таблице,Например, все в порядке, когда я ввожу Джона Ли и Тима Вонга, но не Тима Люнга.

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

Ответы [ 6 ]

2 голосов
/ 11 февраля 2012

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

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

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

0 голосов
/ 11 февраля 2012

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

CREATE UNIQUE NONCLUSTERED INDEX uniqueName_Index 
       ON TableName (first_name, last_name);
0 голосов
/ 11 февраля 2012

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

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

0 голосов
/ 11 февраля 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."
}

Стиль Php.

0 голосов
/ 11 февраля 2012

Попробуйте: CREATE UNIQUE CLUSTERED INDEX index_name ON table_name (first_name, last_name);или: CREATE UNIQUE NONCLUSTERED INDEX индекс_имя ON имя_таблицы (имя_символа, имя_символа);

0 голосов
/ 11 февраля 2012

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

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

...