none
2 tabloyu tek sorgu ile getirmek ? RRS feed

  • Soru

  • Sorunum aslında olabilirmi konusunda sizden bilgi mahiyetindedir.

    2 select sorgosu sonucunu döndürmek istiyorum..1 tabloda banka bilgileri diğerindeki sorguda ise krediler var bunları bir tabloda cekmem gerekli yardımlarınız bekliyorum..

    1. sorgu

    SELECT  LGMAIN.DISCDUEDATE AS [VADE] ,
            BNACC.DEFINITION_ AS [BANKA_ADI] ,
            LGMAIN.LINEEXP AS [AÇIKLAMA] ,
            LGMAIN.TOTAL ,
            ISNULL(CLFIC.FICHENO, 'BOŞ') AS [FİŞ_NO] ,
            CASE WHEN LGMAIN.DEVIR = 1 THEN 'DEVİR ETMİŞ'
                 ELSE 'DEVİR OLMAMIŞ'
            END AS [DEVİR_BİLGİSİ]
    FROM    LG_016_01_PAYTRANS LGMAIN WITH ( NOLOCK, INDEX = I016_01_PAYTRANS_I1 )
            LEFT OUTER JOIN LG_016_CLCARD CLNTC WITH ( NOLOCK ) ON ( LGMAIN.CARDREF = CLNTC.LOGICALREF )
            LEFT OUTER JOIN L_CURRENCYLIST EXCH WITH ( NOLOCK ) ON ( LGMAIN.TRCURR = EXCH.CURTYPE )
            LEFT OUTER JOIN LG_016_BANKACC BNACC WITH ( NOLOCK ) ON ( LGMAIN.BANKACCREF = BNACC.LOGICALREF )
            LEFT OUTER JOIN LG_016_01_CLFLINE CTRNS WITH ( NOLOCK ) ON ( LGMAIN.FICHEREF = CTRNS.LOGICALREF )
            LEFT OUTER JOIN LG_016_01_CLFICHE CLFIC WITH ( NOLOCK ) ON ( CTRNS.SOURCEFREF = CLFIC.LOGICALREF )
    WHERE   ( LGMAIN.BNTRCREATED = 0 )
            AND ( LGMAIN.TRCODE IN ( 72 ) )
            AND ( LGMAIN.CANCELLED = 0 )
            AND ( ( BNACC.CARDTYPE IN ( 5, 6 ) )
                  OR ( ( BNACC.CARDTYPE IN ( 1, 2, 3, 4 ) )
                       AND ( BNACC.KKUSAGE = 1 )
                     )
                )
    ORDER BY LGMAIN.DATE_ ASC;

    2. sorgu

    SELECT TOP 150
          
            LGMAIN.DUEDATE ,
         
            LGMAIN.TOTAL ,
            LGMAIN.INTTOTAL ,
            LGMAIN.BSMVTOTAL ,
                    BNCREDIT.CODE ,
            BNCREDIT.TRCURR ,
            BNACC.CODE ,
         
            BNACC.IBAN ,
            BNCREDIT.CRCALCTYPE ,
            BNACC.DEFINITION_ 
        
    FROM    LG_016_BNCREPAYTR LGMAIN WITH ( NOLOCK, INDEX = I016_BNCREPAYTR_I3 )
            LEFT OUTER JOIN LG_016_BNCREDITCARD BNCREDIT WITH ( NOLOCK ) ON ( LGMAIN.CREDITREF = BNCREDIT.LOGICALREF )
            LEFT OUTER JOIN LG_016_BANKACC BNACC WITH ( NOLOCK ) ON ( BNCREDIT.BNCRACCREF = BNACC.LOGICALREF )
    WHERE   ( LGMAIN.TRANSTYPE = 0 )
            AND ( LGMAIN.CREDITREF = 34 )
    ORDER BY LGMAIN.DUEDATE ,
            LGMAIN.LOGICALREF;

    12 Şubat 2016 Cuma 08:46

Yanıtlar

  • Şöyle bir önerim olabilir, kabaca;

    SELECT a.Alan1 as Alan11, a.Alan2 as Alan12, b.Alan1 as Alan21
    FROM
    (
       --birinci sorgunuz burada
    ) as a
    INNER JOIN
    (
       --ikinci sorgunuz burada
    ) as b on a.Id = b.Id
    
    
    
    


    e-mail: onay[nokta]yalciner[at]hotmail[nokta]com

    • Yanıt Olarak Öneren CetinBasoz 12 Şubat 2016 Cuma 09:30
    • Yanıt Olarak İşaretleyen Serkan Canseven 12 Şubat 2016 Cuma 22:10
    12 Şubat 2016 Cuma 08:57
  • Olumsuz olursa hata cevapta degil ki. Sonucta iliskisel veritabani kullaniyorsun, sorgularinin arasinda yukaridaki haliyle bir iliski yok, olursa o cevap dogru. Yani:

    select a.Alan1, b.Alan2 from table1 a inner join table2 b on a.Table1Id = b.Table1id

    ile:

    select a.Alan1, b.Alan2 
    from (
      select * from table1
    ) a inner join 
    (select * from table2) b on a.Table1Id = b.Table1id

    ayni kapiya cikan sorgular. Sorgularin tekrarlamasi gerekiyorsa, ya da sonraki oncekinden birseyler kullaniyorsa daha pratik olani with kullanmak:

    with sorgu1 as 
    (
       --birinci sorgunuz burada
    ),
    sorgu2 as (
       --ikinci sorgunuz burada
    )
    SELECT a.Alan1 as Alan11, a.Alan2 as Alan12, b.Alan1 as Alan21
    FROM
     sorgu1 as a
    INNER JOIN
     sorgu2 as b on a.Id = b.Id;
    

     
    12 Şubat 2016 Cuma 17:20

Tüm Yanıtlar

  • Şöyle bir önerim olabilir, kabaca;

    SELECT a.Alan1 as Alan11, a.Alan2 as Alan12, b.Alan1 as Alan21
    FROM
    (
       --birinci sorgunuz burada
    ) as a
    INNER JOIN
    (
       --ikinci sorgunuz burada
    ) as b on a.Id = b.Id
    
    
    
    


    e-mail: onay[nokta]yalciner[at]hotmail[nokta]com

    • Yanıt Olarak Öneren CetinBasoz 12 Şubat 2016 Cuma 09:30
    • Yanıt Olarak İşaretleyen Serkan Canseven 12 Şubat 2016 Cuma 22:10
    12 Şubat 2016 Cuma 08:57
  • @Önay bey

    hemen deneyecegim..olumlu olursa yanıt olarak işaretlerim..

    12 Şubat 2016 Cuma 15:14
  • alt alta mı gelmesi gerekiyor. ne olması gerekiyor sorgundan anlamadım. Eğer alt alta ise UNION ALL


    kdrgny@outlook.com

    12 Şubat 2016 Cuma 15:22
  • Olumsuz olursa hata cevapta degil ki. Sonucta iliskisel veritabani kullaniyorsun, sorgularinin arasinda yukaridaki haliyle bir iliski yok, olursa o cevap dogru. Yani:

    select a.Alan1, b.Alan2 from table1 a inner join table2 b on a.Table1Id = b.Table1id

    ile:

    select a.Alan1, b.Alan2 
    from (
      select * from table1
    ) a inner join 
    (select * from table2) b on a.Table1Id = b.Table1id

    ayni kapiya cikan sorgular. Sorgularin tekrarlamasi gerekiyorsa, ya da sonraki oncekinden birseyler kullaniyorsa daha pratik olani with kullanmak:

    with sorgu1 as 
    (
       --birinci sorgunuz burada
    ),
    sorgu2 as (
       --ikinci sorgunuz burada
    )
    SELECT a.Alan1 as Alan11, a.Alan2 as Alan12, b.Alan1 as Alan21
    FROM
     sorgu1 as a
    INNER JOIN
     sorgu2 as b on a.Id = b.Id;
    

     
    12 Şubat 2016 Cuma 17:20
  • @Çetin Hocam dogru Aralarında bir ilişki ID vs yok..
    13 Şubat 2016 Cumartesi 09:38