从n到n表返回n列

Dio*_*tos 0 sql sql-server

有了这个配置,关系模型明智:

A --- * C * --- B
Run Code Online (Sandbox Code Playgroud)

C因此是a和之间的n到n表b.

鉴于这C有以下领域:aID, bID, cValue

B具有以下内容:bID, bName

我怎样才能选择所有的条目An所有列B,与应用aID

例如,select将返回以下列

aID - bName1 - bName2 - bName3
1   - cValue1 - cvalue2 - cvalue3
2   - cValue4 - cvalue5 - cvalue6
Run Code Online (Sandbox Code Playgroud)

由于A中的不同条目可能与B中的所有条目匹配,也可能不匹配,因此某些列可以为空.

Joe*_*orn 5

单个查询无法做到这一点.

SQL语言对于在查询编译时知道列的数量和类型有非常严格的要求.查询数据确定列的数量或类型(例如使用此问题)是不可能的.甚至SELECT *查询仍然可以从表模式中获得固定的列信息.

相反,您必须分三步完成:

  1. 编写查询以返回有关所需列的数据
  2. 使用该查询的结果动态生成新查询
  3. 执行动态SQL并返回结果

即便如此,在客户端系统中转换此数据通常被认为是更好的做法.

可能还有另一种可能性.如果您可以提前对A <=> B连接的数量进行合理的限制,您可以多次在A和B之间(通过C)进行LEFT JOIN,每次可能的连接一次,最终可能在结果中有很多NULL值.这也可能是一个非常浪费的查询.