[英]ROW_NUMBER and multiple JOIN
當我測試此請求時:
SELECT
*, ROW_NUMBER() OVER (ORDER BY test1) AS lineNumb
FROM
(SELECT DISTINCT
tab1.test1, tab2.test2
FROM TB_tab1 tab1
JOIN TB_tab2 tab2 ON tab2.test3 = tab1.test3
JOIN TB_tab3 tab3 ON tab3.test4 = tab1.test4
WHERE tab3.test5 != 'test') AS sub
WHERE lineNumb BETWEEN 1 AND 5
我得到:
錯誤:列名無效:“ lineNumb”。 SQLState:S0001錯誤代碼:207
為什么以及如何糾正我的要求?
SELECT *
FROM
(
SELECT *, ROW_NUMBER() OVER (ORDER BY test1) AS lineNumb FROM (
SELECT DISTINCT tab1.test1, tab2.test2
FROM TB_tab1 tab1
JOIN TB_tab2 tab2 ON tab2.test3 = tab1.test3
JOIN TB_tab3 tab3 ON tab3.test4 = tab1.test4 WHERE tab3.test5 !='test') as sub
) as sub2
WHERE lineNumb BETWEEN 1 AND 5
為什么:
您不能訪問select的where子句中的別名lineNumb列-上下文中未定義。
糾正方法:
將您所擁有的用作子查詢或CTE,然后使用where從中選擇。
SELECT *
FROM (<you existing query without the where>)
WHERE lineNumb <= 5
您不能在同一級別的where
中使用列別名。 您可以使用解析函數執行所需的操作。 您甚至不需要distinct
:
SELECT *
FROM (SELECT tab1.test1, tab2.test2,
ROW_NUMBER() OVER (PARTITION BY tab1.test1, tab2.test2 ORDER BY test1) as seqnum,
DENSE_RANK() OVER (ORDER BY test1) as lineNumb
FROM TB_tab1 tab1
JOIN TB_tab2 tab2 ON tab2.test3 = tab1.test3
JOIN TB_tab3 tab3 ON tab3.test4 = tab1.test4
WHERE tab3.test5 <> 'test'
) sub
WHERE lineNumb BETWEEN 1 AND 5 AND seqnum = 1;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.