仅当该字段存在时才将字符串追加到SQL联接表
我有一个用户模型,与概要文件模型连接,创建一个连接表来保存属于每个模型的所有信息。我希望能够将字符串附加到列值的末尾,但仅当该字段存在时。这是我目前拥有的仅当该字段存在时才将字符串追加到SQL联接表,sql,ruby-on-rails,activerecord,Sql,Ruby On Rails,Activerecord,我有一个用户模型,与概要文件模型连接,创建一个连接表来保存属于每个模型的所有信息。我希望能够将字符串附加到列值的末尾,但仅当该字段存在时。这是我目前拥有的 User.joins(:profile).select('users.id, full_name AS name, concat(profiles.address1, profiles.address2) AS address,
User.joins(:profile).select('users.id,
full_name AS name,
concat(profiles.address1, profiles.address2) AS address,
profiles.state,
profiles AS phone_number')
这将给我:
id | Name | Address | State | Phone Number
1 | Bob Smith | 123 Bakery Ln | CA | 123-456-7890
2 | Linda Joe | Apt 51 | AZ | 098-765-4321
3 | Steve Jobs | 1 Apple Drive | CA | 321-654-0987
但是请注意,Linda Joe的地址只是她的公寓号码,下面是对象的外观:(User.find(2).profile.address1==nil&&User.find(2).profile.address2==Apt 51')==true
我想找到一种只在address1存在时连接address的方法。我希望它看起来像这样:
id | Name | Address | State | Phone Number
1 | Bob Smith | 123 Bakery Ln | CA | 123-456-7890
2 | Linda Joe | | AZ | 098-765-4321
3 | Steve Jobs | 1 Apple Drive | CA | 321-654-0987
感谢您的帮助。谢谢 您可以使用
CASE
语句在select中执行条件连接:
User.joins(:profile).select('users.id,
full_name AS name,
CASE WHEN profiles.address1 IS NOT NULL
THEN concat(profiles.address1, profiles.address2)
ELSE '' END AS address,
profiles.state,
profiles AS phone_number')
谢谢工作起来很有魅力@sclem72你总是可以接受正确的答案,以帮助其他有同样问题的人知道这是有帮助的。