如何减少对第二个具有字段ID、DESCRIPTION的表的多个联接,并在一行中显示结果,而不使用UNION或对表2的第二次选择?
我试过这样做,但我不想被查询超载。有什么方法可以优化选择吗?
SELECT *
FROM TABLE_1 T1
LEFT JOIN TABLE_2 **INNER_1** ON T1.ID_1 = INNER_1.ID
LEFT JOIN TABLE_2 **INNER_2** ON T1.ID_2 = INNER_2.ID
LEFT JOIN TABLE_2 **INNER_3** ON T1.ID_3 = INNER_3.ID
...
2条答案
按热度按时间mzaanser1#
ID_1, ID_2, ID_3
等列的存在意味着你的表不是第一范式(1 NF),这是数据建模/设计的第一个最基本的步骤。不应该有这样的重复组。正确的解决方法是将这些ID分解到它们自己的表中:一旦这是固定的,你然后简单地做:
这将使您无论有多少ID都能很好地执行,极大地简化了代码,并使您的设计具有弹性和可扩展性(您可以在不更改代码的情况下添加ID)。
ilmyapht2#
如果你只希望每个内部
ID
有一个值,那么你可以使用条件聚合来透视:其中,对于示例数据:
输出:
| ID|按键1|数值1|按键2|价值2|按键3|价值3|
| --------------|--------------|--------------|--------------|--------------|--------------|--------------|
| 1|键1|A|键2|B|键3|C|
| 第二章|按键4|D|键5|E级|键6|F|
fiddle