两个表之间的 SQL,我们取得了良好的结果

问题描述 投票:0回答:1

我在 sql 中的两个表之间遇到问题

表1

名称_id 1 2 3
规格-A 100 110 120
规格-B 200 220 230

表2

名字 名称_id
M.约翰 规格-B 2
J·史密斯 规格-A 3

所以我想连接两个表,我想在表 2 中选择人员 name_id 和他的类别,并在表 1 中选择行和列

select * 
from table 1
inner join table 2 on table1.name_id = table2.name_id

但是我无法将 table2.cat 与表 1 中的每一列连接起来 例如 table2.cat = 2 和 table1.2 自动。

我想看下一个:

名字 名称_id 价格
M.约翰 规格-B 2 220
J·史密斯 规格-A 3 120

我想看下一个:

名字 名称_id 价格
M.约翰 规格-B 2 220
J·史密斯 规格-A 3 120
php sql sqlite join select
1个回答
0
投票

查询将是:

WITH T AS
(    
SELECT T2.name, T2.name_id, T2.cat,
        CASE T2.cat WHEN 1 THEN T1."1"
                    WHEN 2 THEN T1."2"
                    WHEN 3 THEN T1."3"
        END AS price
FROM    "Table 1" AS T1
           JOIN "Table 2" AS T2
              ON T1.name_id = T2.name_id 
)
SELECT *
FROM   T
WHERE  price IS NOT NULL; 

但是你的数据结构不尊重数据建模的最新技术......所以性能将是灾难性的......

表 1 将被分成 2 个表:

CREATE "Table 1" 
(name_id VARCHAR(32) PRIMARY KEY);

CREATE "Table 1.1" 
(name_id VARCHAR(32) NOT NULL REFERENCES "Table 1" (name_id), 
 cat INT NOT NULL, 
 price DECIMAL(16,2) NOT NULL, 
 PRIMARY KEY (name_id, cat );

然后您可以拥有一个显示旧版本“表 1”的视图...(带有一些 PIVOT 运算符或至少一个 CASE 语句)。

© www.soinside.com 2019 - 2024. All rights reserved.