SSMS 有一个查询设计器,我通常会避免使用它,因为老实说,我无法真正使用它。
不幸的是,我的同事们这样做了。由于我有 30 分钟的空闲时间,我终于想知道是我的问题还是 SSMS。
例如:假设我们有一个表buildings、一个表floors、一个表rooms和一个映射表usage_types(room-usage_types)。
当我手动设计查询时,我这样做:
select all buildings,
left join all floors in those buildings
left join all rooms in those floors
left join the room-usage_types mapping table.
现在,当我尝试在查询设计器中做同样的事情时,它以某种方式从映射表开始,然后左连接房间,左连接楼层,然后左连接建筑物。
这从根本上是有缺陷的,因为如果一个房间的映射表中没有条目,它不会返回所有房间(这是假设每个房间都必须在一个楼层,每个楼层都必须在一个建筑物中,但不是每个房间必须有一个与自身相关的使用类型[在一段时间内])......
现在,如果我开始修改连接,我会得到这个查询
SELECT
FROM usage_type mapping
RIGHT OUTER JOIN Floors
LEFT OUTER JOIN Rooms
RIGHT OUTER JOIN Floors
现在这个查询看起来是等价的,但这是一个例子,通常,我必须加入更多的表。所以我不是特别喜欢左右连接的混合,因为最后很难理解(尤其是当连接的地方没有遵循几个 ON 语句时),几乎不可能搜索错误(而且我对查询设计器弄清楚我想要什么的能力不太信任)。
到目前为止,我还没有找到一种方法来“设计”我想要的查询。唯一的方法似乎是创建初始查询,然后获取 SQL 文本,然后调整连接,然后使用 SQL 查询设计器重新打开它。
最后不用说,这比一开始手动做要花更长的时间,而且当查询设计器修改了SQL脚本时,如果不先手动重新格式化就无法阅读了……
在我看来,我的变体完全不可能用查询设计器来完成......我也觉得奇怪的是,在查询设计器中,在连接符号的上下文菜单中,有时左边的表格在顶部,有时,右边的桌子。
然后,当我必须选择下一个而不是上一个时,它会进行右连接。我可以选择上面的那个,然后它进行左连接,但是顺序错误……这正是我不想要的……
所以我想问:是否有一些“秘密”方式来指定查询应该从哪个表开始,最好根本没有任何正确的连接?