Ana Sayfa > C#, Programlama > Bu kodda ne yanlış var? – 6

Bu kodda ne yanlış var? – 6

03 Eylül 2010

Bir kitabevi için web uygulaması geliştiriyorsunuz. Yaptığınız analize dayanarak, uygulamanın veritabanını aşağıdaki gibi tasarladınız;

Bu kodda ne yanlış var? - 6 / Veritabanı Modeli

Veritabanı modelinize göre, her kitabın sıfır veya daha fazla yazarı olabilir, her yazarın sıfır veya daha fazla kitabı olabilir.

Toplam Kitap Adedi ve Toplam Yazar Adedi sorularına cevap verebilmek için, aşağıdaki sorguyu yazdınız;

SELECT DISTINCT
	COUNT(Yazarlar.YazarID) AS ToplamYazarAdedi,
	COUNT(Kitaplar.KitapID) AS ToplamKitapAdedi
FROM
	Yazarlar
	FULL JOIN YazarKitaplari YK ON Yazarlar.YazarID = YK.YazarID
	FULL JOIN Kitaplar ON YK.KitapID = Kitaplar.KitapID

Problem, rakamların beklediğinizden yüksek çıkması.

Sizce problem nedir ve nasıl düzeltebiliriz?


İlgili diğer başlıklar:



  1. Eylül 4th, 2010 at 05:28 | #1

    Toplam Kitap Adedi ve Toplam Yazar Adedi isteniyorsa Kitaplar ve Yazarlar tabloları ayrı ayrı sorgulanabilir.

    Eğer istenen En Az Bir Yazarı Olan Kitap Adedi ve En Az Bir Kitabı Olan Yazar Adedi ise o zaman Kitaplar ve Yazarlar tabloları ayrı ayrı YazarKitaplari tablosu ile birleştirilerek sorgulanabilir.

  2. osetsinan
    Eylül 27th, 2010 at 11:00 | #2

    aşağıdaki sorguyla istediğin sonucu alırsın;

    SELECT
    	COUNT(YazarID) AS YazarSayisi,
    	SUM(KitapID) AS KitapSayisi
    FROM
    (
    	SELECT
    		dbo.YazarKitaplari.YazarID,
    		COUNT(dbo.YazarKitaplari.KitapID) AS KitapID
    	FROM
    		dbo.Kitaplar
    		INNER JOIN dbo.YazarKitaplari ON dbo.Kitaplar.KitapID = dbo.YazarKitaplari.KitapID
    		INNER JOIN dbo.Yazarlar ON dbo.YazarKitaplari.YazarID = dbo.Yazarlar.YazarID
    	GROUP BY
    	dbo.YazarKitaplari.YazarID
    ) AS T
  3. Mehmet TEMEL
    Ekim 24th, 2010 at 22:35 | #3

    “Full join” heriki tablonun eşleşip eşleşmediğine bakmadan direk heriki tabloyuda getirir. bunun yerine inner left veya rigth kullanmanız gerekmektedir.