[英]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.