2014-05-09 44 views
0

Table_1Table_2都有idname不明確的列名使用ROW_NUMBER時,加入

此查詢的工作:

SELECT * 
    FROM (SELECT ROW_NUMBER() OVER() AS rn Table_1.*, 
       Table_2.* 
      FROM Table_1 
      LEFT OUTER JOIN Table_2 on Table_1.id = Table_2.id 
     ) 
    WHERE rn Between 1 AND 10 

但如何選擇TABLE_1列名?我換成*與Table_1.name,它表明:

SQL0206N "Table_1.name" is not valid in the context where it is used. 
SQLSTATE=42703 
+0

要排除故障,請拿走table2。*。如果解決了這個問題,請逐個添加所需的字段。 –

+0

一般來說,你不想使用'SELECT *',這可能是其中一個原因。其他重要的一點是,如果優化器能夠更好地使用索引(如果它確切地知道您需要哪些列) - 如果您只是索要所有列,則必須打開表格。 –

回答

3

它看起來像你缺少rnTable_1之間的逗號。我想,這應該工作:

SELECT * FROM (
    SELECT 
     ROW_NUMBER() OVER() AS rn 
     ,Table_1.* 
     ,Table_2.* 
    FROM Table_1 
    LEFT JOIN Table_2 
     on Table_1.id = Table_2.id 
) A 
WHERE rn Between 1 AND 10 
+0

我不得不在WHERE子句之前/最後一個括號之後添加一個表標識符'AS ',以獲得此工作,即')AS myTableName WHERE',以防萬一幫助別人.... –

+0

啊,這會有所作爲。我更新了我的答案,謝謝@BigRich! – bhamby

0

正如bhamby說,它看起來像你忽略了rnTable_1

之間用逗號您可能還可以簡化您的查詢......

SELECT x.*, y.* 
    FROM Table_1 x 
    LEFT JOIN Table_2 y 
    on x.id = y.id 
    FETCH FIRST 10 ROWS ONLY