SORU
25 Mart 2010, PERŞEMBE


Nasıl yinelemeleri önlemek için SQL Server SELECT sorgusu İÇİNE EKLE?

Aşağıdaki iki tablo var:-

Table1
-------------
ID Name
1  A
2  B
3  C

Table2
--------
ID Name
1  Z

Table2Table1 veri eklemek istiyorum ve aynı sözdizimi aşağıdaki gibi kullanabilirsiniz:-

INSERT INTO Table2(Id, Name) SELECT Id, Name FROM Table1

Ancak, benim durumumda yinelenen Kimlikleri olabilir var Table2 (benim durumumda Onun Sadece "1") ve istemiyorum anlaşıldı yine bu At bir hata.

Böyle bir şey yazabilirim:-

IF NOT EXISTS(SELECT 1 FROM Table2 WHERE Id=1)
INSERT INTO Table2 (Id, name) SELECT Id, name FROM Table1 
ELSE
INSERT INTO Table2 (Id, name) SELECT Id, name FROM Table1 WHERE Table1.Id<>1

Daha iyi bir yolu IF - ELSE kullanmadan bunu yapmak için var mı? INSERT INTO-SELECT bazı durumuna göre iki ifade kaçınmak istiyorum.

CEVAP
25 Mart 2010, PERŞEMBE


NOT EXISTS kullanarak:

INSERT INTO TABLE_2
  (id, name)
SELECT t1.id,
       t1.name
  FROM TABLE_1 t1
 WHERE NOT EXISTS(SELECT id
                    FROM TABLE_2 t2
                   WHERE t2.id = t1.id)

NOT IN kullanarak:

INSERT INTO TABLE_2
  (id, name)
SELECT t1.id,
       t1.name
  FROM TABLE_1 t1
 WHERE t1.id NOT IN (SELECT id
                       FROM TABLE_2)

LEFT JOIN/IS NULL kullanarak:

INSERT INTO TABLE_2
  (id, name)
   SELECT t1.id,
          t1.name
     FROM TABLE_1 t1
LEFT JOIN TABLE_2 t2 ON t2.id = t1.id
    WHERE t2.id IS NULL

Üç seçenek, LEFT JOIN/IS NULL daha az etkilidir. this link for more details bkz.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • case LianLi

    case LianLi

    28 Mayıs 2010
  • ICON

    ICON

    19 EKİM 2011
  • SerienTrailerMP

    SerienTraile

    7 HAZİRAN 2012