选择具有多个关联版本的所有条目

时间:2018-01-23 20:28:14

标签: sql sqlite

基本上我想要一个选择ID和版本的select语句,但是每个ID都有多个版本,所以我想选择表中的所有ID以及与每个ID相关联的每个版本。

如果我这样做:

select ID, Version FROM Table

然后我只获得一个ID并且它与最新版本相关联,我没有获得ID = X的多个条目以及与ID X相关联的多个版本等

我想要的数据示例:

ID = 1, Version = 0
ID = 1, Version = 1.0
ID = 1, Version = 2.0
ID = 2, Version = 0
ID = 2, Version = 1.0
ID = 2, Version = 2.0
ID = 2, Version = 3.0
ID = 3, Version = 0
ID = 4, Version = 0
ID = 4, Version = 1.0

etc etc

3 个答案:

答案 0 :(得分:0)

就像

一样简单
 SELECT ID , Version FROM Table WHERE ID='X'

此处X是您的身份证号码

答案 1 :(得分:0)

老实说,你的问题有点令人困惑,因为

select ID, Version From table

会带来表中的所有数据,我认为该表很大,这就是为什么它看起来不会显示每个id的所有版本,所以请尝试使用Order by。

  select ID, Version FROM Table
    order by ID, Version

答案 2 :(得分:0)

如果您的表结构包含2列ID(请参阅注释),并且版本AND对于每个行/版本的组合存在一行,则SELECT ID,版本将列出所有行。

e.g。 CREATE TABLE IF NOT EXISTS details (id INTEGER, version TEXT);

它的填充如下: -

enter image description here

然后SELECT id,version from details;的结果将是: -

enter image description here

或者,如果查询是SELECT 'ID= ' ||id||', Version= ' || version AS vercol FROM details;,那么(为了满足您展示的结果): -

enter image description here

  • 请注意,名为id的列不是rowid的别名(即,它未定义为id INTEGER PRIMARY KEYid INTEGER PRIMARY KEY AUTOINCREMENT)。

然而

如果结构和用法不是基于上述内容,那么您可能会遇到问题。

例如,以下内容存储最新版本(和其他版本): -

enter image description here

然后SELECT id, version FROM details_alt;将导致您看起来正在描述的内容,即(在此用法中忽略其他版本列): -

enter image description here

要操纵这样的结构并且计算除最高版本之外的其他列或包括其他列将是非常复杂的。例如,这是前者的一部分: -

SELECT
    CASE
        WHEN version < 1 THEN 'ID= '||id||', Version=0'
        WHEN version < 2 THEN 'ID= '||id||' Version=0, 1.0'
        WHEN version < 3 THEN 'ID= '||id||' Version=0, 1.0, 2.0'
        WHEN version < 4 THEN 'ID= '||id||' Version=0, 1.0, 2.0, 3.0'
    END AS idcol
FROM details_alt

并导致: -

enter image description here

简而言之,如果您的表格不是最初显示的结构,看起来就是这种情况,那么您会引入不必要的复杂性,而不是遵循完善的数据库设计技术。

如果不使用初始结构,答案是使用与所示初始设计一致的设计。

否则,您应该修改您的问题,以便在存储实际数据示例时显示表格结构及其使用方式。