根据多个表的UNION向SQLite SELECT语句添加新的ROWID

时间:2018-11-13 13:20:22

标签: sql sqlite select integer rowid

请考虑以下SQLite语句,其中每个product_id在每个表中可能至少出现一次。我们的SELECT语句的目的是将所有product_id合并到一个表中。

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列添加到结果视图?

每个表都有其自己的ID INTEGER列,但是如果我们使用SELECT ID列,那么在新视图中将有重复的product_id列和单独的ID

添加ROWID无效,因为它返回表的ID

此外,视图中没有存储行。

1 个答案:

答案 0 :(得分:1)

这在旧版本的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;