如何在不使用 UNION 或对表 2 进行第二次选择的情况下,将多个连接减少到具有字段 ID、DESCRIPTION 的第二个表,并将结果显示在一行中?
我试过这样做,但我不想被查询超载。 有什么方法可以优化选择吗?
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
...
ID_1, ID_2, ID_3
等列的存在意味着您的表不是第一范式(1NF),这是数据建模/设计的第一个最基本的步骤。不应该有这样的重复组。正确的解决方法是将这些 ID 分解到它们自己的表中:
table_1 table1_table2_xref table_2
------- ----------- -------
{table_1_pk}, {table_1_pk}, {id}
scalar attributes of table_1... {id } table_2 attrs...
一旦解决了这个问题,你就可以简单地做:
SELECT *
FROM table_1 t1
LEFT JOIN table1_table2_xref x ON x.table_1_pk = t1.table_1_pk
LEFT JOIN table_2 t2 ON x.id = t2.id
无论您拥有多少个 ID,这都会让您表现良好,极大地简化您的代码,并使您的设计具有弹性和可扩展性(您可以在不更改代码的情况下添加 ID)。