2016-03-28 27 views
0

Herkese iyi günler! Bana yardım eder misin? :)SQL aynı sütun değerine sahip satırları seç

VERİTABANI ÖRNEK: Yukarıdaki IDCatalog Code atanan

ID Catalog Code Description Type Supplier Supplier Code 

1 6083   TV LG 32 tv lg  ud28f1137ka-ga-i2-tr 
1 6083   TV LG 32 tv samsung asfb1145-ssd   # select it 
2 6129   Phone 5X phone apple  mics_rp 
2 6129   Phone 5X phone htc  nco_p13 961-x 
2 6129   Phone 5X phone nokia  n_41s 
3 6210   Friezer  agd samsung asfb1145-ssd   # found match 
                    it has the same 
                    `Supplier Code` 

. Tüm alanlar ID hariç VARCHAR'dur. Boş olabilir.

seçin örneğin Catalog Code = 6083 ve Supplier Codes ait biri aynıdır tüm diğer Catalog CodesEĞER olsun: I DO İSTEDİĞİNİZ NE

.

Bu yüzden(son satır) değerini almalıyım çünkü 6083 (ilk satır).

MY FAKİR GİRİŞİMİ: İÇİN

SELECT a.* 
    FROM `TABLE` a 
    WHERE EXISTS 
     (SELECT 1 
      FROM `TABLE` b 
      WHERE b.`Catalog Code` = '6083' 
      AND (
        a.`Supplier Code` NOT IN ('') 
       AND a.`Supplier Code` IN b.`Supplier Code` 
       ) 
     ) 

İHTİYAÇ TASARIM GELİŞMELER

Benim gerçek DB 000 100 üzerinde satırları sahiptir. DB tasarımının iyileştirmelere ihtiyacı olduğunu hissediyorum ama hangileri?

INDEXES, PRIMARY KEY, FOREIGN KEY ile ikinci DB?

+0

Hangi sütunlarda() göründüğünde ve ne '' sütununda '' ne zaman görünür? Bir kimlik her zaman aynı kodla görünüyor mu? Bir kod her zaman aynı kimliğe sahip mi görünüyor? Sorunuz net değil. "Tablo" derken de "db" kullanıyorsunuz. – philipxy

cevap

0

daha çok ben bunu sorguyu yazarsınız:

select t.* 
from t 
where t.supplier_code in (select t2.supplier_code 
          from t t2 
          where t2.catalog_code = '6083' 
         ); 

Kodunuz oldukça garip. Neden not in ('')'unuz var? Bu gereksiz. Daha sonra ikinci in'da bir listeye ihtiyacınız var, bir sütun değeri değil. Aslında, sadece = yeterlidir.

Performans için, t(catalog_code, supplier_code) adresinden bir dizin isteyebilirsiniz.

+0

'NOT IN', bazı sütun değerleri boş dizeler veya 0 veya bir şeyi hariç tutmak isterim - belki bunu yapmak için daha iyi bir yol var. – SQLnoob

+0

Katıldığımız zamanları hatırlıyorum. Hey gidi günler. – Strawberry

+0

Biliyorum 'JOIN' kullanılmalı - Kafamı bu özel problemin etrafına dolamıyorum (noktalar bağlayın). Bunun için bize yardım eder misin?:) – SQLnoob

0

Bu özel soru için 2 tabloyu nasıl kullanırsınız.

1) katalog kod bilgilerini içermektedir. (Primer tuşu-1,2,3)

3) Katalog kodu ve ilgili olarak kimliğini saklamak()

2) alanı bilgilerini birincil anahtar olarak katalog kod tutmak kod-kimlik eşleme (her iki tablodan yabancı anahtar) .. her ikisi de tamsayı değerleridir, bu yüzden karşılaştırmalar nedeniyle sorgular biraz daha hızlı olacaktır.

+0

'PRIMARY KEY 'benzersiz olmalı ve' KATALOG KODU'' değildir. Aynı, bu DB'de "ID" için de geçerlidir. Ancak yeni bir PK_ID sütunu ekleyebilirim, ancak bununla başıma daha fazla devam edemiyorum - sırada ne var? Bu yüzden yardım istiyorum :) – SQLnoob

+0

tablonuzu 3 tabloya ayırın. 1. sadece katalog kodu, desc, tip ve ... olacak. 2. tablo ID-tamsayı, tedarikçi, tedarikçi kodu ve ... olacak 3. tablo katalog kodu ve tedarikçi-ID –

+0

olacak şeyler yapmak için öğrenme): 2. tabloda 'TEDARİKÇİ KODU Kimliği' ile 'YURTDIŞI KOD' referans alınarak 2. tabloda? – SQLnoob

İlgili konular