2016-12-01 65 views
1

我有一個像隱藏ROW_NUMBER()的子查詢

Select * 
From y 
WHERE y.z = (
SELECT a, (adding rownumber here) 
FROM b 
) 

查詢我想增加一個條款,它僅選擇每隔一行。要做到這一點,我需要添加row_number()子查詢,並有一個條款,其中rownumber%2 = 0.

我的問題是,我可以添加rownumber到子查詢的選擇,並以某種方式隱藏它它不影響查詢

+1

MySQL缺少內置的'ROWNUM'功能。 –

+1

您可以將子查詢嵌套在僅選擇所需字段的另一個查詢中;爲了只獲得「每隔一行」,您可能需要(我在MySQL中創建「行號」的最常見方式涉及會話變量,這些變量在查詢中的不同子句中使用時無法預測地工作)。 – Uueerdo

回答

1

在MySQL中的Rownumbering是一個臭名昭着的痛苦的脖子。

你可以像這樣在MySQL中爲你的行編號。

  SELECT (@rownum := @rownum+1) rownum, b.* 
      FROM b 
      JOIN (SELECT @rownum := 0) init 
      ORDER BY b.whatever 

不要忘記這裏的ORDER BY子句。如果沒有明確的排序,查詢引擎可以自由地隨機化它返回的行的順序。

然後,您可以使用該混亂作爲子查詢,並與rownum做事情。

SELECT * 
    FROM (
       SELECT (@rownum := @rownum+1) rownum, b.* 
       FROM b 
       JOIN (SELECT @rownum := 0) init 
       ORDER BY b.whatever 
     ) table_with_rownum 
    WHERE rownum % 2 = 0 

如果你不想顯示rownumbers,改變你的SELECTSELECT *SELECT col, col, col並離開了rownum