gpt4 book ai didi

sql - 在 Rails 中连接不相关的表

转载 作者:数据小太阳 更新时间:2023-10-29 08:37:14 25 4
gpt4 key购买 nike

底线 - 我想将两个“属于”彼此但确实具有公共(public)字段的数据库表连接在一起。

在研究 StackOverflow 之后,我找到了一些直接使用 SQL 解决类似问题的方法,如下所示:

Address.joins('INNER JOIN phones on addresses.person_id = phones.person_id').select("addresses.*, phones.*").limit(1)

但是,当我在 Rails 控制台中使用上述语句时,它会执行以下 SQL 查询:

Address Load (0.3ms)  SELECT  addresses.*, phones.* FROM `addresses` INNER JOIN phones on addresses.person_id = phones.person_id LIMIT 1

并返回以下数据(出于隐私原因被审查):

=> #<ActiveRecord::Relation [#<Address id: 0001, created_at: "YYYY-MM-DD hh:mm:ss", updated_at: "YYYY-MM-DD hh:mm:ss", description: nil, line1: "123 Evergreen Terrace", line2: "", line3: "", city: "Springfield", state: "IL", country: "USA", zip: "11111", building_number: "001", person_id: 1, address_type: "Home", primary: false, show: nil, job_id: nil, room_number: "001", source: "HR", effective_date: "YYYY-MM-DD">]>

Phone 表中没有一个字段进入最终记录。

我是否必须让这些不相关的表彼此“属于”才能使它们工作?喜欢 -

class Address < ActiveRecord::Base
belongs_to :person
end

class Phone < ActiveRecord::Base
belongs_to :person
belongs_to :address
end

或者我可以在不修改模型关系的情况下做我想做的事吗?

最佳答案

数据可能在查询中不可见,但记录将响应查询获取的那些字段,这意味着如果电话记录具有 number 属性,例如,打电话.number 将以获取的号码响应

address = Address.joins(....).select('*').first
address.number # => this will print the phone number of the phone record.

关于sql - 在 Rails 中连接不相关的表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29707890/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com