在尝试编写查询时,我发现(困难的方法)SQL Server 在执行查询时解析 SELECT 之前很久就解析了查询中的 WHERE。
的MSDN文档说,一般逻辑解析顺序是这样的:SELECT被解析几乎最后(因此导致“没有这样的对象[别名]”试图使用在其他条款列别名时误差)。甚至有人建议允许在任何地方使用别名,但被微软团队驳回,理由是 ANSI 标准合规性问题(这表明这种行为是 ANSI 标准的一部分)。
作为一名程序员(不是 DBA),我发现这种行为有些令人困惑,因为在我看来它在很大程度上违背了拥有列别名的目的(或者,至少,如果列别名是在查询执行中更早地解析),因为您可以实际使用别名的唯一地方是在 ORDER BY 中。作为一名程序员,它似乎错过了使查询更强大、更方便和 DRY 的巨大机会。
看起来这是一个如此明显的问题,它有理由认为,除了 SELECT 和 ORDER BY 之外,还有其他原因决定不允许列别名,但这些原因是什么?
我一直在使用 MySQL Workbench 遇到一些我不确定是否能够修复的问题(即,似乎是一个可能已经重新出现的旧错误),所以我希望能够找到一个如果我无法使用它,可以很好地备份它。我筛选了几个建议的替代方案,例如 Navicat(Navicat不能免费用于商业用途,它只有 30 天的试用期),但没有一个能令人满意地满足我当前的要求。
我需要的:
虽然很高兴拥有,但我不需要 Workbench 拥有的额外数据建模的东西。我也不需要花哨的 GUI 东西(查询设计器等)。一种以有序的方式查看数据的方法和一个编辑查询的地方真的是我所需要的。
我目前正在检查 HeidiSQL,但它让我想起了我在运行 Win9x/Win2k 时曾经使用过的东西,只能通过 WINE 运行,已经在我身上崩溃过一次,而且总体感觉很笨重,尽管我确实喜欢它的简单能够转储数据库或对多个表进行更改。