簡體   English   中英

在 mysql 數據庫中創建視圖時如何將行號作為列?

[英]How to give rownumber as a column when you create a view in mysql DB?

我有一個 select 查詢,它可以自動生成 rownumber 列作為結果的 ID。

SELECT
    @curRow := @curRow + 1 AS rowID,
    `tt`.`STATUS` AS `STATUS`,
    `tt`.`PERFORMED_BY` AS `PERFORMED_BY`,
    `tt`.`TMS_LOAD_ID` AS `TMS_LOAD_ID`,
    `tt`.`SHIP_LOCATION_ID` AS `SHIP_LOCATION_ID`,
    `tt`.`TRIP_END_TIME` AS `TRIP_END_TIME`,
    `tt`.`COMMENTS` AS `ASSIGN_DETAILS_COMMENT`,
   
FROM
    abc as tt
                       
    JOIN(
    SELECT
        @curRow := 0
    ) r
   

但是當我創建視圖時,它告訴我 select 命令有參數。

我該如何解決這個問題?

謝謝。

理想情況下,如果您使用的是 MySQL 版本 8+,則可以在此處使用ROW_NUMBER

CREATE VIEW yourView AS
SELECT
    ROW_NUMBER() OVER (ORDER BY some_col) AS rowID,
    STATUS AS STATUS,
    PERFORMED_BY AS PERFORMED_BY,
    TMS_LOAD_ID AS TMS_LOAD_ID,
    SHIP_LOCATION_ID AS SHIP_LOCATION_ID,
    TRIP_END_TIME AS TRIP_END_TIME,
    COMMENTS AS ASSIGN_DETAILS_COMMENT
FROM abc;

請仔細注意,對ROW_NUMBER的調用具有ORDER BY子句,它確定哪一行將編號為 1、2 等。如果沒有ORDER BY ,上述對ROW_NUMBER的調用和您的用戶變量方法都沒有多大意義。

也就是說,如果您堅持使用 MySQL 5.7 或更早版本,您可以使用相關子查詢來模擬行號:

CREATE VIEW yourView AS
SELECT
    (SELECT COUNT(*) FROM abc t2 WHERE t2.some_col < t1.some_col) AS rowID,
    STATUS AS STATUS,
    PERFORMED_BY AS PERFORMED_BY,
    TMS_LOAD_ID AS TMS_LOAD_ID,
    SHIP_LOCATION_ID AS SHIP_LOCATION_ID,
    TRIP_END_TIME AS TRIP_END_TIME,
    COMMENTS AS ASSIGN_DETAILS_COMMENT
FROM abc t1

如果some_col從來沒有重復值,這種方法會很有效。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM