【发布时间】:2009-02-18 10:53:32
【问题描述】:
我在使用 SQL 时遇到了病态问题,因此我通常通过构建快速软件应用程序来处理我的 SQL 问题,从而对所有数据库问题进行分类。
(在这种情况下我也是这样做的)
感谢 StackOverflow,我想我可能会因为正确而感到羞耻,所以我想学习如何在实际 SQL 或 T-SQL 本身(如果可能的话)中进行这种 SQL 故障排除:
我有:
数据库 DB1 表 A (unitNo, BuildingNo)
数据库 DB2 表 B (unitNo, BuildingNo)
我想从数据库 DB1 中找出表 A 中存在的单元(单元编号),而数据库 DB2 中的表 B 中不存在,反之亦然。
可以有多个单元具有相同的单元编号,这是因为可以将相同的单元编号分配给不同建筑物的单元。
我没有任何数据库的写入权限。
我希望这不会被视为“gimme teh codz”帖子,我想知道比我更流畅的 SQL 的人如何排序这种算法,教程或提示的帖子非常受欢迎,没有完整的需要代码,但如果它有助于有意义,那么请这样做。
起初我以为我可以从一个表中获取所有单元号,然后从另一个表中排除它们,如下所示:
select concated.unit from
( SELECT ( unitNo + ',' + CONVERT(varchar(12), BuildingNo) ) as unit
FROM A) concated
having concated.unit not in
(
'201,1',
'202,1',
'203,1',
'204,1',
'205,1',
'206,1',
[...]
这通常可行,但任何一张表中的单元数都是巨大的,尝试这样做会使 SQL 服务器崩溃:
“堆栈空间不足”
谢谢,
瑞克
【问题讨论】:
标签: sql sql-server database algorithm query-optimization