【发布时间】:2010-11-24 22:07:45
【问题描述】:
我正在两个表之间进行连接,并希望根据它们是否有记录来选择列。我试图避免有多个相同的字段,并试图将它们压缩成单列。比如:
Select
id = (CASE WHEN a.id IS NULL THEN b.id ELSE a.id END),
name = (CASE WHEN a.name IS NULL THEN b.name ELSE a.name END)
From Table1 a
Left Join Table2 b
On a.id = b.id
Where a.id = @id
如果记录存在,我希望 id 从 Table1 填充,但如果不从 Table2 提取。前面的代码没有返回任何记录,因为Table1 中没有NULL 值所以我的问题是如何运行检查以查看是否存在任何记录?此外,如果有人知道更好的方法来完成我正在尝试做的事情,我感谢指导和建设性的批评。
编辑
看起来COALESCE 将适用于我想要完成的工作。我想提供更多关于我正在使用什么的信息,并就我是否使用最好的方法获得一些建议。
我有一张臃肿的桌子Table2,它正在生产中。我正在为此系统构建新的 Web 应用程序,但无法证明重新设计完整的数据库是合理的,因此我正在尝试“即时”做一个。我创建了一个新表Table1,我正在为以下方法编写存储过程Get(Select)、Set(Update)、Add(Insert)、Remove (Delete)。这样,对于我的代码,我似乎正在使用一个不臃肿的表。我的代码将简单地调用其中一种 SP 方法,然后存储过程将处理旧表和新表之间的数据。我目前正在研究Get 方法,如果Table1 中不存在旧表Table2,我需要检查它以获取记录。
感谢这里的建议,我的查询目前看起来像这样:
Select
id = coalesce(a.id, b.student_number),
first_name = coalesce(a.first_name, b.first_name),
last_name = coalesce(a.last_name, b.last_name),
//etc
From Table1 a
Full Outer Join Table2 b
On a.id = b.student_number
Where (a.id = @id Or b.student_number = @id)
这适用于我想要完成的工作,如果有更好或更正确的方法来解决这个问题,我想把它扔给有经验的人群以获得任何提示或建议。
谢谢
【问题讨论】: