2016-04-08 63 views
0

Bölümler, bölgeler ve polis kayıtları tabloları için 3 tablom var. tablo veriMySql - Üç tablodaki verileri tek bir tablo halinde birleştirin

divisions 
    id 
    name 

districts 
    id 
    division_id 
    name 

police_stations 
    id 
    division_id 
    district_id 
    name 

Tablolarımdaki tüm güncel tablo bağımlılığı ile veri ile sadece bir tablo tasarlayabilir olan

divisions 
- districts 
-- police_stations 

Tablo biçimi gibi bağımlıdır? Yapabilirsem, geçiş süreci nasıl olacak?

cevap

0

Umarım bu size KATILDI kullanmalıdır birlikte grup birden fazla tablo için senin sorunun

SELECT * from divisions d 
      join police_stations ps on d.id=ps.division_id 
      join districts dist on ps.district_id =dist.id; 
+0

Cevabınız için teşekkür ederiz.Ben sorgu hakkında sormuyorum, @Richard Hamilton –

1

çözer. Bu yeni tablolar oluşturmaktan daha iyi bir veritabanı uygulamasıdır.

INNER JOIN anahtar sözcüğü, her iki tablonun sütunları arasında bir eşleşme olduğu sürece, her iki tablodaki tüm satırları seçer.

SELECT * 
FROM divisions divis 
INNER JOIN districts dis 
ON dis.division_id = divis.id 
INNER JOIN police_stations pol 
ON pol.district_id = dis.id 

Not: Eğer bölünmeleri tanımlamak için başka bir şey kullanmak zorunda Görünüşe DIV kelime, mysql ayrılmıştır.

bu verilerle yeni bir tablo oluşturma konusunda ısrar ederseniz, CREATE TABLE AS tarifi kullanabilirsiniz.

Bunu yapmak için orijinal şemamızı değiştirmemiz gerekir. Yeni tablolar yinelenen adlara sahip olamaz, bu yüzden orijinal tabloları tüm benzersiz sütunlara sahip olacak şekilde değiştirmeliyiz. Örneğin name için

district_name olur. İşte

CREATE TABLE combined AS (
    SELECT divis.id, divis.division_name, dis.district_name, pol.police_name 
    FROM divisions divis 
    LEFT JOIN districts dis 
    ON divis.id = dis.division_id 
    LEFT JOIN police_stations pol 
    ON pol.district_id = dis.id 
); 

o

http://sqlfiddle.com/#!9/7ec3b/1/0

Bu çok kötü olsa veritabanı tasarımı olduğunu göstermeleri bir keman olduğunu. Benim ilk çözüm, tek bir tablo kullanma

+0

yorum bölümünde beklentilerimi görmek Hızlı cevap için teşekkürler, ben sormak istemiyorum. Tüm verilerle sadece bir tabloyu nasıl tasarlayacağımı ve özel verilerimi mevcut bağımlılıkla nasıl alabileceğimi öğrenmek istiyorum. –

+0

Bunun için bir çözüm ekledim. Ama bunun korkunç bir veritabanı tasarımı olduğunu bilin. Katkıları kullanmak çok tercih olurdu –

1

önerilir: her satiri belirlenmesi için bir id olacaktı; PRIMARY KEY olur. Başka bir satırın 'ana' (bölme bölge bölgesi, vb.) Olduğunu söylemek için bir parent_id olacaktır.

JOIN bir self join haline gelir.

SELECT ... 
    FROM tbl AS division 
    JOIN tbl AS district ON division.id = district.parent_id 
    JOIN tbl AS station ON district.id = station.parent_id 
    WHERE ... 

SELECT ve ilgili 'takma' ile WHERE her alanı 'hak' emin olun; örnek: division.name.

Bu tasarım deseni, keyfi derinliklerin çoğu 'hiyerarşik' yapısı için çalışır. Seninki tam olarak 3 seviye derin, bu yüzden biraz daha basit. parent_id herhangi bir "bölge" satırlar için 0 olacağını

Not. Ve INDEX(parent_id) olması yararlı olacaktır.

İlgili konular