SQLite SELECT 语句基于几张表的UNION 添加新的ROWID
Adding new ROWID to SQLite SELECT statement based on the UNION of several tables
考虑以下 SQLite
语句,其中每个 product_id
可能在每个 table 中至少出现一次。我们 SELECT
语句的目的是将所有 product_id
合并为一个 table.
SELECT product_id
FROM product_id_table_UK
UNION
SELECT product_id
FROM product_id_table_DE
UNION
SELECT product_id
FROM product_id_table_ES
UNION
SELECT product_id
FROM product_id_table_IT
UNION
SELECT product_id
FROM product_id_table_FR
如何向生成的视图添加 ID INTEGER
列?
每个 table 都有自己的 ID INTEGER
列,但如果我们 SELECT ID
列,那么我们将在新视图中有重复的 product_id
列,单独 ID
的。
添加 ROWID
不起作用,因为它 returns table 的 ID
。
此外,视图中没有存储行。
这在旧版本的 SQLite 中很痛苦(row_number()
天之前)。你可以这样做:
with p as (
SELECT product_id
FROM product_id_table_UK
UNION
SELECT product_id
FROM product_id_table_DE
UNION
SELECT product_id
FROM product_id_table_ES
UNION
SELECT product_id
FROM product_id_table_IT
UNION
SELECT product_id
FROM product_id_table_FR
)
select p.*,
(select count(*) from p p2 where p2.product_id <= p.product_id)
from p;
考虑以下 SQLite
语句,其中每个 product_id
可能在每个 table 中至少出现一次。我们 SELECT
语句的目的是将所有 product_id
合并为一个 table.
SELECT product_id
FROM product_id_table_UK
UNION
SELECT product_id
FROM product_id_table_DE
UNION
SELECT product_id
FROM product_id_table_ES
UNION
SELECT product_id
FROM product_id_table_IT
UNION
SELECT product_id
FROM product_id_table_FR
如何向生成的视图添加 ID INTEGER
列?
每个 table 都有自己的 ID INTEGER
列,但如果我们 SELECT ID
列,那么我们将在新视图中有重复的 product_id
列,单独 ID
的。
添加 ROWID
不起作用,因为它 returns table 的 ID
。
此外,视图中没有存储行。
这在旧版本的 SQLite 中很痛苦(row_number()
天之前)。你可以这样做:
with p as (
SELECT product_id
FROM product_id_table_UK
UNION
SELECT product_id
FROM product_id_table_DE
UNION
SELECT product_id
FROM product_id_table_ES
UNION
SELECT product_id
FROM product_id_table_IT
UNION
SELECT product_id
FROM product_id_table_FR
)
select p.*,
(select count(*) from p p2 where p2.product_id <= p.product_id)
from p;