簡體   English   中英

SQLITE3:當有數百列要轉換時,將ID轉換為代碼

[英]SQLITE3: converting IDs to codes when there are hundreds of columns to convert

我有一個表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列!

有人可以幫我解決這個問題嗎?

我同意@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;

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')) ;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM