【问题标题】:Adding new ROWID to SQLite SELECT statement based on the UNION of several tables基于多个表的 UNION 为 SQLite SELECT 语句添加新的 ROWID
【发布时间】:2018-11-13 13:20:22
【问题描述】:

考虑以下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 不起作用,因为它会返回表的IDs。

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

【问题讨论】:

  • 如果您使用的是 3.25,您可以在该联合的结果上使用 row_number() 窗口函数,但这只是装饰性的。也许是一个临时表?你打算用这个 id 列做什么?
  • 修复您的数据结构,以便您将所有产品都放在一个表中,并带有客户标识符。

标签: sql sqlite select integer rowid


【解决方案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;

【讨论】:

    猜你喜欢
    • 2021-12-05
    • 1970-01-01
    • 2022-01-02
    • 1970-01-01
    • 1970-01-01
    • 2021-01-05
    • 2013-02-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多