SQL SERVER-də View

Salam hörmətli dostlar. SQL serverlə  mən bir  layihə  hazırlayıram. SQL bazada bir neçə cədvəl yaratmışam. Həmin cədvəllər vasitəsi ilədə  bir neçə  view-lar qurmuşam. İndi belə bir problem çıxıb. Hansısa cədvəldə məlumat olmayanda yaratdığım  view-da  olan əlaqəli digər cədvəllərində məlumatı göstərilmir. Prinsipcə  belə olmalıdırki, əgər cədvəldə məlumat varsa view-da həmin məlumat göstərilsin əks  halda dəyər  boş qalsın amma o biri cədvəllərin məlumatı göstərilsin. Diqqətinizə görə minnətdaram

Səs: 0. Bəyənilsin Zəifdir

Baxılıb: 1779 dəfə

Cavablar ( 4 )

  1. Salam Toğrul bəy.

    Bu tip sual üçün çox az məlumat vermisiniz. Sualınızı biraz dəqiqləşdirin. İlkin olaraq cədvəllər arasında qurduğunuz əlaqələri yoxlayın. Daha sonra View -da istidadə olunan cədvəllərin birləşməsi əmrlərinə diqqət yetirin: İNNER JOİN, LEFT JOİN və s.

    Ümumiyyətlə cədvəllər arasında qurulan bütün  əlaqələri: Primary Key – Foreign Key tapmaq üçün aşağıdakı sorğudan istifadə edə bilərsiniz:

    SELECT
     o1.name AS FK_table,
     c1.name AS FK_column,
     fk.name AS FK_name,
     o2.name AS PK_table,
     c2.name AS PK_column,
     pk.name AS PK_name,
     fk.delete_referential_action_desc AS Delete_Action,
     fk.update_referential_action_desc AS Update_Action
    FROM sys.objects o1
     INNER JOIN sys.foreign_keys fk
     ON o1.object_id = fk.parent_object_id
     INNER JOIN sys.foreign_key_columns fkc
     ON fk.object_id = fkc.constraint_object_id
     INNER JOIN sys.columns c1
     ON fkc.parent_object_id = c1.object_id
     AND fkc.parent_column_id = c1.column_id
     INNER JOIN sys.columns c2
     ON fkc.referenced_object_id = c2.object_id
     AND fkc.referenced_column_id = c2.column_id
     INNER JOIN sys.objects o2
     ON fk.referenced_object_id = o2.object_id
     INNER JOIN sys.key_constraints pk
     ON fk.referenced_object_id = pk.parent_object_id
     AND fk.key_index_id = pk.unique_index_id
    ORDER BY o1.name, o2.name, fkc.constraint_column_id

     

  2. Salam Rauf bəy. Sualımı  cavablandırdığınız  üçün  sizə  öncədən  təşəkkür  edirəm

    Cədvələr  arasında  əlaqəni  qurmaq  üçün Primary Key-dən  istifadə  etmişəm.View-da  istifadə etdiyim  cədvəllər  arasındakı  əlaqəni  INNER JOIN komandasından, View-da  istifadə  etdiyim  View-lar arasındakı  əlaqəni  CROSS  JOIN  komandasından  istifadə  etmişəm

    • Toğtul bəy. Əslində məni sonuncu mərhələ maraqlandırır. View -lar arasında CROSS JOİN əmrindən istifadə etmisiniz. Bildiyiniz kimi CROSS JOİN çox nadir hallarda istifadə olunur və mürəkkəb cədvəllərdə istifadəsi tövsiyə olunmur. Əgər CROSS JOİN əmrinə WHERE filtri əlavə edilməyibsə, sütunlarda olan sətirləri bir birinə vuracaq, məsələn: table1 də 100 sətir var, table2 də isə 5 sətir var, CROSS JOİN nəticəsi 500 sətir olacaq, hətta hər iki cədvəldə eyni məlumat olsa belə. Əgər  WHERE filtri əlavə edilibsə, bu İNNER JOİN – lə eyni effekti verir, məsələn aşağıdakı sorğular eyni nəticəni verəcək:

      Cross join

      SELECT * FROM table1 CROSS JOIN table2 WHERE table1.id = table2.fk_id

      Inner join

      SELECT * FROM table1 INNER JOIN table2 ON table1.id = table2.fk_id

      Buna görə də, View -lar arasında əlaqələri İNNER JOİN vasitəsilə yaradılmasını məsləhət görərdim.

  3. Rauf bəy  Siz  düzgün  qeyd  etdiniz. Mən  CROSS JOIN əmrindən  istifadə edərkən  eyni  zamanda  WHERE  filtirindən  istifadə etmişəm

Cavab yazın