我创建了如下所示的主要 SELECT 语句。对于 Base 表中的每一行(基于 IDKey,我添加了一些列,这些列的值来自几个表的 INNER JOIN 结果。
SELECT
IDKey,
Name,
(select Amount from Table1 INNER JOIN Table2 ... where ID=IDKey) AS AmountTypeX,
(select Amount from Table1 INNER JOIN Table2 ... where ID=IDKey) AS AmountTypeY
FROM BaseTable
基表:
IDKey Name
----------
1 Ian
2 John
3 Ann
...
几个表 Table1, Table2... 的内部连接:
ID Amount Type
--------------
1 100 X
1 200 Y
2 300 X
2 400 Y
3 500 X
3 600 Y
...
结果看起来像:
IDKey Name AmountTypeX AmountTypeY
-------------------------------------
1 Ian 100 200
2 John 300 400
3 Ann 500 600
...
您是否有任何建议如何在开始时避免主查询中的这种嵌套 SELECT 语句并使该查询更简单和更有效?
我正在考虑将 INNER JOIN 结果的 PIVOTING 看起来如下所示(一行中特定 ID 的所有数据),然后使用主查询进行 JOIN 但不知道如何执行此操作并且是否可能。
ID X Y
-----------
1 100 200
2 300 400
3 500 600
...
这是经典的 EAV 模式,是设计问题的有力指标。我希望你明白这种设计是违反关系数据库的核心规则的。如果你想深入挖掘,我有一篇关于这个主题的博文。
但是,如果无法更改设计,您可以使用
PIVOT
查询来提取数据: