我的关系数据库中有3个不同的实体。该实体名为“Competencia'与另外两个实体有很多关系,Nivel' Funcion'或者都不是。 ' CompetenciaTipo'是' Competencia'中的领域。告诉我是否' Competencia'与Nivel,' Funcion'有关。或者都不是。在这两种情况下我都有中间表来处理那些多对多关系,你可以在下图中查看我的ER图的一部分。
我需要构建一个SQL查询来将所有行放入' Competencia'表和与其他表的关系(如果有的话),但似乎它将是一个复杂的查询。
您认为我的模型设计是否合适?您还有其他建议可以获得相同的结果吗?
由于
答案 0 :(得分:1)
选择Competencia Funcions: -
SELECT c.*, f.* --
FROM Competencia c
LEFT JOIN CompetenciaFuncion cf ON cf.CompetenciaId = c.CompetenciaId
LEFT JOIN Funcion f ON f.FuncionId = cf.FuncionId
WHERE {......insert additional conditions..... }
选择Competencia Nivels: -
SELECT c.*, n.* --
FROM Competencia c
LEFT JOIN CompetenciaNivel cn ON cn.CompetenciaId = c.CompetenciaId
LEFT JOIN Nivel n ON n.NivelId = cn.NivelId
WHERE {......insert additional conditions..... }
LEFT JOIN确保返回来自competencia表的所有详细信息以及来自Funcion / Nivel表的任何内容。注意:大多数情况下,您希望在网格(或类似)中显示结果,然后SELECT中的c.*
部分将被简单地替换为c.CompetenciaId,以便您拥有密钥,但不要使用#39 ; t不必要地重复来自comptencia表的数据。
这些查询也可以构成VIEW的基础,如果它们被反复使用的话。