Aşağıdaki sorguya sahibim. Girdi olarak productid (2,4,5) verildiğinde keyid ile bu listeyi ilişkilendirmek istiyorum. Sonra o anahtarlıklar ile ilişkili tüm ürünleri almak istiyorum.Sadece tek bir sql sorgusu ile CTE ve SELECT'in değiştirilmesi mümkün mü? (Bağımlı sonuçlar)
Örneğin: ürünüm, spiro'ya girdi olarak 2,4,5 olarak geçtiğimi varsayalım, anahtarlıkları 22,34,35,38 (CTE sonucu) olarak alacağım. Bu tuşlar giriş ürün listesine eşlenir. Bu tuşlara bağlı olarak (CTE sonucu) bu tuşlarla ilişkili tüm ürünleri istiyorum. Keyid = 22 ürün kimliğine sahip ürün adlarının şu anda 2,4,5,89 & keyid = 34 ürün isimleri olduğunu şimdi 2,4,5,23,45 vb. Ürünlere sahip olacak.
Yukarıdaki problem için aşağıdaki çözüm. Sadece bu çözümü geliştirip geliştiremeyeceğimizi mi yoksa iki masa tekrarlanırken bu işi tek bir sorguda yapıp yapamayacağımı umuyorum.
ürün ve productkeymapping tablolar içinWITH GetKey_CTE
AS
(
SELECT k.id, some other select statements
FROM KeyDim k
INNER JOIN KeyData kd on kd.id = k.id
INNER JOIN KeyProductMapping kpm on kpm.id = k.id and kpm.mkey = k.mkey
INNER JOIN Products p on p.productid = kpm.productid
and p.productid IN (2,4,5)
LEFT JOIN some more joins
WHERE clause conditions
)
SELECT cte.id as keyid, pn.productname, some other columns
FROM GetKey_CTE cte
INNER JOIN KeyProductMapping kpm on cte.id = kpm.id
INNER JOIN Products pn on pn.productid = kpm.productid
ORDER BY cte.id
Veri kümesi Örnek: Ürünler tablo için
:
productid name
1 car
2 bike
3 plane
4 bus
5 train
45 cycle
ProductKeyMapping Tablo
productid keyid
1 23
2 987
45 23
1 56
giriş productid 1 demek, daha sonra, son sonucu olmalıdır :
keyid productid name
23 1 car
23 45 cycle
56 1 car
, biz eğer söyleyemem 'KeyProductsMapping' ve' Products' tablolarına iki atıfta bulunmaktan kaçınmak mümkündür. (Ortak bir tablo ifadesi kesinlikle gerekli değildir. Aynı sorgu, satır içi görünüm olarak görünebilir ve cte (veya satır içi görünüm) sorgularının GROUP BY içermediği göz önüne alındığında, büyük olasılıkla bunun gerekmeyeceği düşünülür. Ayrı bir SELECT Sorgu tek bir SELECT ile yeniden yazılabilir, ancak bu sorgu aynı tablo referanslarına sahip olacaktı ... 'Ürünler' ve 'KeyProductsMapping 'tablolarına iki referans. – spencer7593
Benim için hiçbir anlam ifade etmiyor: INNER JOIN Ürünler pn on cte.productid = kpm.productid – Paparazzi
mymistake, ben ilişkiyi tablo – user2406618