SQLITE3:当有数百列要转换时,将 ID 转换为代码



我有一个表A,它有几百列(例如301(,第一列是主键,其余是表B中的ID,即

CREATE TABLE "A" (
ko_index_id INTEGER NOT NULL,
ko1 INTEGER NOT NULL,
ko2 INTEGER NOT NULL,
...
ko300 INTEGER NOT NULL,
PRIMARY KEY (ko_index_id)
);
CREATE TABLE "B" (
id INTEGER NOT NULL,
name INTEGER NOT NULL,
PRIMARY KEY (id)
);

我希望能够将ID转换为名称。例如:

SELECT name FROM B WHERE id in (SELECT * FROM A);

除了SELECT *部分意味着ko_index_id将被输入B这是错误的。如果A只有两列,我可以写

SELECT name FROM B WHERE id in (SELECT ko1, ko2 FROM A);

但是表A有 300 列!

谁能帮我解决这个问题?

300+ 列?如何通过将这些列table A转为行来重做。可以有键名称和值列。例如:

select * from A: 
id, ko_name, ko_value
1,  ko1, 5
1,  ko2, 6 

然后选择键变得容易得多;例如:

SELECT name FROM B WHERE id in (SELECT ko_value FROM A where ko_name in ('ko1', 'ko2')) ;

我同意@Gordon的评论。如果你有能力改变你的数据模型,我建议你使用交集表。这是对数据库中的"多对多"关系进行建模的典型方法。

例:

CREATE TABLE "A" (
id INTEGER NOT NULL,
...
PRIMARY KEY (id)
);
CREATE TABLE "B" (
id INTEGER NOT NULL,
name INTEGER NOT NULL,
...
PRIMARY KEY (id)
);
CREATE TABLE "AB" (
a_id INTEGER NOT NULL,
b_id INTEGER NOT NULL
);
SELECT A.id, B.name 
FROM A
INNER JOIN AB ON A.id=AB.a_id
INNER JOIN B ON AB.b_id=B.id;

最新更新