SORU
14 Temmuz 2009, Salı


ETMENİZ için SQL - çoklu Katılın Dış birleşim koşulları Bıraktı

SERİ çevirmek için çalışıyorum şu SQL, var:

SELECT f.value
FROM period as p 
LEFT OUTER JOIN facts AS f ON p.id = f.periodid AND f.otherid = 17
WHERE p.companyid = 100

Sol dış normal uygulaması (örn. katılmak gördüm into x from y in x.DefaultIfEmpty() vb.) ama diğer birleştirme durumu (AND f.otherid = 17) tanıtmak için nasıl emin değilim

EDİT

Neden AND f.otherid = 17 koşul yerine WHERE KATILIN parçası mıdır? f bazı satırlar olmayabilir ve ben hala bu satırlar dahil olmak istiyorum çünkü. Eğer durum katıldıktan sonra WHERE uygulanan, eğer - o halde, bu davranışlarını anlamıyorum.

Ne yazık ki bu

from p in context.Periods
join f in context.Facts on p.id equals f.periodid into fg
from fgi in fg.DefaultIfEmpty()
where p.companyid == 100 && fgi.otherid == 17
select f.value

bu eşdeğer gibi görünüyor:

SELECT f.value
FROM period as p 
LEFT OUTER JOIN facts AS f ON p.id = f.periodid 
WHERE p.companyid = 100 AND f.otherid = 17

çok peşinde olduğum şey değildir.

CEVAP
14 Temmuz 2009, Salı


DefaultIfEmpty() çağırmadan önce birleştirme koşulu tanıtmak gerekir. Sadece uzatma yöntemi sözdizimini kullanmak istiyorum:

from p in context.Periods
join f in context.Facts on p.id equals f.periodid into fg
from fgi in fg.Where(f => f.otherid == 17).DefaultIfEmpty()
where p.companyid == 100
select f.value

Ya da bir alt sorgu kullanabilirsiniz:

from p in context.Periods
join f in context.Facts on p.id equals f.periodid into fg
from fgi in (from f in fg
             where f.otherid == 17
             select f).DefaultIfEmpty()
where p.companyid == 100
select f.value

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • ethr95awd

    ethr95awd

    8 Kasım 2006
  • lane182videos

    lane182video

    6 EKİM 2011
  • segtlim

    segtlim

    21 EKİM 2008