Parçalı tanımlayıcısı bağlı değil
BÖYLECE benzer hatalar gördüm ama benim sorunum için bir çözüm bulamadım. SQL sorgu gibi:
select distinct a.maxa,b.mahuyen,a.tenxa,b.tenhuyen
,isnull(dkcd.tong,0) as tongdkcd
from phuongxa a, quanhuyen b
left outer join (
select maxa,count(*) as tong from khaosat where convert(datetime,ngaylap,103) between'Sep 1 2011' and 'Sep 5 2011' group by maxa
) as dkcd on dkcd.maxa=a.maxa
where a.maxa<>'99' and left(a.maxa,2)=b.mahuyen
order by maxa
Bu sorgu öldürdüğümde, hata sonucu:
Multi-part identifier ".maka" değil bağlı.Neden?
P/s: Eğer 2 ayrı sorgu sorgu ürettim, Tamam.
select distinct a.maxa,b.mahuyen,a.tenxa,b.tenhuyen
from phuongxa a, quanhuyen b
where a.maxa<>'99' and left(a.maxa,2)=b.mahuyen
order by maxa
ve
select maxa,count(*) as tong from khaosat where convert(datetime,ngaylap,103) between'Sep 1 2011' and 'Sep 5 2011' group by maxa
CEVAP
Örtülü karıştırması açık birleşerek katıldı. Bu mümkün değil ama bunu doğru yapmak için nasıl farkında olmak gerekir.
Şey, açık birleşimler (doğru olanlar hayata kullanarak JOIN
anahtar kelime) üzerinde önceliğe örtülü olanlar ('virgül' katılır, katılmak durumdur belirtilen WHERE
fıkra).
İşte sorgu bir film
SELECT
…
FROM a, b LEFT JOIN dkcd ON …
WHERE …
Muhtemelen bu böyle davranmanız için sizi bekliyor
SELECT
…
FROM (a, b) LEFT JOIN dkcd ON …
WHERE …
bu tablolar a
b
kombinasyonu tablo dkcd
ile birleştirilir. Aslında neler oluyor
SELECT
…
FROM a, (b LEFT JOIN dkcd ON …)
WHERE …
o da zaten anladı dkcd
katıldı özellikle karşı b
b
, o zaman sonuç katılın karma ile a
ve daha fazla filtre ile WHERE
fıkra. Bu durumda, 23* *ON
yan herhangi bir referans bu noktada bilinmiyor geçersiz, a
. Bu hata iletisini alıyorsanız nedeni budur.
Eğer senin yerinde olsaydım, muhtemelen bu sorguyu yeniden yazmak için denemek istiyorsunuz, ve olası bir çözüm olabilir:
SELECT DISTINCT
a.maxa,
b.mahuyen,
a.tenxa,
b.tenhuyen,
ISNULL(dkcd.tong, 0) AS tongdkcd
FROM phuongxa a
INNER JOIN quanhuyen b ON LEFT(a.maxa, 2) = b.mahuyen
LEFT OUTER JOIN (
SELECT
maxa,
COUNT(*) AS tong
FROM khaosat
WHERE CONVERT(datetime, ngaylap, 103) BETWEEN 'Sep 1 2011' AND 'Sep 5 2011'
GROUP BY maxa
) AS dkcd ON dkcd.maxa = a.maxa
WHERE a.maxa <> '99'
ORDER BY a.maxa
Burada tablolar a
b
ilk katılan, sonra sonuç dkcd
katıldı. Temel olarak, bu aynı sorgu gibi senin, sadece kullanarak farklı bir sözdizimi biri katıldı, hangi yapar büyük bir fark var: başvuru a.maxa
dkcd
'nın katılın durumdur artık kesinlikle geçerli.
@Aaron Bertrand doğru da belirttiği gibi, muhtemelen belirli bir ad ile maxa
muhtemelen nitelemek ORDER BY
fıkra a
,.
Endınvoke (), tür-isteğe bağlı isteğe ...
Bir program derlenirken bir kütüphane ...
Bağlı giriş değeri bir WordPress kulla...
Parça Aktiviteye bağlı MyFragment deği...
Neden C# 4 isteğe bağlı parametreler a...