具有此配置,明智的关系模型:
A --- * C * --- B
C
是a
和b
之间的n对n表。
鉴于C
具有以下字段:aID, bID, cValue
并且B
具有以下内容:bID, bName
如何为A
适用的所有n
选择B
中带有aID
列的所有条目?
例如,选择将返回以下列
aID - bName1 - bName2 - bName3
1 - cValue1 - cvalue2 - cvalue3
2 - cValue4 - cvalue5 - cvalue6
由于A中的不同条目可能与B中的所有条目匹配,也可能不匹配,因此某些列可能为空。
答案 0 :(得分:5)
单查询是不可能的。
SQL语言有一个非常严格的要求,要在查询编译时知道列的数量和类型。不能通过数据来查询列的数量或类型,例如对此问题进行查询。甚至SELECT *
查询仍然可以从表架构中获取固定的列信息。
相反,您必须分三个步骤进行操作:
即使那样,通常也可以考虑在客户端系统中进行数据透视。
可能还有另一种可能性。如果您可以事先对A <=> B连接的数量进行合理的限制,则可以多次(通过C)在A和B之间进行一次LEFT JOIN,对于每个可能的连接都进行一次,最终可能会得到一个结果中有很多NULL值。这也可能是非常浪费的查询。