Sisipkan SQL dengan kondisi di mana untuk semua bidang

Saya punya pertanyaan tentang SQL. Ada tabel dengan 3 bidang.

  • ID (nomor otomatis berdasarkan akses)
  • Nama Depan (Teks)
  • Nama Belakang (Teks)

Berikut datanya

Data

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

Saya ingin memasukkan nama depan dan nama belakang ke dalam tabel, namun nama depan dan nama belakang tidak boleh sama dengan data yang ada di tabel. Misalnya, boleh saja jika saya memasukkan John Lee dan Tim Wong, tetapi tidak dengan Tim Leung.

Bisakah saya menggunakan 1 SQL untuk menyelesaikan bagian ini? Terima kasih banyak.


person Dickson Lee    schedule 11.02.2012    source sumber


Jawaban (6)


Dengan asumsi TSql:

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

Seperti yang disarankan orang lain, menambahkan batasan unik untuk menegakkan aturan ini adalah ide bagus.

person Bort    schedule 11.02.2012

Tidak. Tapi Anda dapat menetapkan nama depan dan nama belakang sebagai batasan unik.

Anda juga dapat memeriksa apakah ada baris dengan nama depan dan nama belakang yang sama sebelum disisipkan.

person Bruno Costa    schedule 11.02.2012

Coba: BUAT INDEKS CLUSTERED UNIK nama_indeks PADA nama_tabel (nama_depan, nama_belakang); atau: BUAT INDEKS NONCLUSTERED UNIK nama_indeks PADA nama_tabel (nama_depan, nama_belakang);

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

Gaya php.

person Alice    schedule 11.02.2012

Ya. @bort menyarankan baik-baik saja. Namun jika Anda ingin memperbarui baris yang ada dan menyisipkan baris baru dalam satu pernyataan SQL, lihat pernyataan penggabungan.

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

person Brian    schedule 11.02.2012

Anda harus membuat INDEX untuk ini (lihat CREATE INDEX ( Transaksi-SQL))

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