【发布时间】:2012-10-30 17:22:31
【问题描述】:
我正在处理一个查询,除其他事项外,它会为给定 ID 号码的人选择一个电话号码。
这段代码搞定了:
LEFT JOIN [thedatabasename].dbo.[thetablename] Phone
ON p.PersonId = phone.PersonId
AND (phone.[Description] = 'Home Phone'
OR phone.[Description] = 'Cell Phone'
OR phone.[Description] is null)
这行得通,但我想要的是它做一些在概念上更像
IF EXISTS select [phone number] from <tablename> where description = 'Home phone'
ELSE IF EXISTS select [phone number] from <tablename> where description = 'cell phone'
ELSE IF EXISTS select [phone number] from <tablename> where description is null
因此它更喜欢“家庭电话”而不是“手机”,并且更喜欢“手机”而不是没有描述的电话。我不知道如何在我加入的过程中做到这一点。有没有办法做到这一点而不必编写三个单独的选择?此连接所属的查询丑陋且庞大,并且有一堆连接,因此将其分离出来会很困难。有什么建议吗?
【问题讨论】:
-
为什么不在选择中使用 CASE 语句?好像你有更多的控制权。您已经加入电话桌。供参考:techrepublic.com/article/…
-
只是为了澄清:当你说喜欢家庭电话时,如果你有 2 条记录,你不想输出手机记录:一个有手机和一个家庭电话,你的问题是 LEFT JOIN 输出两者。对吗?
-
对。如果他们有“家庭电话”,我只想得到那个,如果没有,那么我只想要他们的“手机”,如果没有,我想要一个带有 NULL 描述的电话号码。大多数人在电话号码表中都有多个条目,但类型各不相同。我认为我现在拥有的只是随机选择他们的家、手机或 NULL 电话号码。
标签: sql join if-statement exists