如何从多个表动态选择适当的表名来创建连接查询

时间:2014-03-10 05:07:48

标签: sql sql-server relational-database

我想动态创建join查询,其中包含以下表格:

表1) userTable :包含userId,userFirstName,userLastName

表2) groupTable :包含groupId,groupName,groupDescription

表3) userGroup :包含userTable和groupTable之间的关系

表4) groupRoles :包含groupId和roleId(任意随机列)之间的关系

情况1:

如果我想知道哪些表 groupId 存在/常见,它会给出这样的结果 enter image description here

查询:

我有一个只接受userId的表单。通过使用userId,我们必须找到:userId,userFirstName,userLastName和groupName。

问题:

问题在于为join子句创建动态查询。

与案例1一样,有2个表选项:groupRoles或userGroup。

那么我如何才能知道动态地从这两个选项中选择哪个表,以便通过关系表将我带到groupTable,在我的情况下是userGroup表? 在我的情况下,我必须找到userId,userFirstName,userLastName和groupName。

我可以从userTable获取userId,userFirstName和userLastName。但是要获取groupTable中存在的groupName列,我们必须为关系获取userGroup表以获取join查询。

那么我们如何才能知道从tableNames(如case1)动态中选择哪个表,以便我们可以从查询中获取GroupName列?

1 个答案:

答案 0 :(得分:0)

我想也许我理解你的问题,你想要以下输出作为:

SELECT 
a.userid,
a.userfirstname,
a.userlastname,
b.groupname
FROM Usertable AS a
INNER JOIN  grouptable AS b
ON a.userid=b.groupid

用户表:

1| a| b 
2| c| d

grouptable将:

1 |X |io
2 |Y |oi

输出:

1| a| b|X 
2| c| d|Y

更新

try this one to click

随着表单和数据元素数量的增长,通用数据库设计限制了新表的扩散。另一方面,在我们的例子中,即使最简单的查询也涉及3个表。

查询的确非常令人难以置信。经过3年的努力,我开始认为明确的表格更好。我宁愿处理更多能够更好地反映业务形式/模型的表 - 我只能通过查看它们来理解;表格中有几个但是有大量无意义的连接表需要令人惊讶的长嵌套查询,以便从数据中获得最基本的意义。您实际上开始记住各个标识列主键的含义/上下文!

最后,我们已经发展到我们拥有一个表来统治它们的所有地方,以便摆脱现有设计和不断变化的用户需求中的一些固有的复杂性(以及过去的错误编码和设计决策)。尽管如此,我们确信我们会遇到问题,因为表格大小达到了百万行数。