我有3个表格,例如keyboard_countries
,keyboard_languages
和lang_regions
。 lang_regions
包含keyboard_countries
和keyboard_languages
的参考ID。
这些表的模式如下:
create_table "keyboard_countries", force: true do |t|
t.string "cc"
t.datetime "created_at"
t.datetime "updated_at"
end
create_table "keyboard_languages", force: true do |t|
t.string "ln"
t.string "lc"
t.string "lr"
t.datetime "created_at"
t.datetime "updated_at"
end
create_table "lang_regions", force: true do |t|
t.integer "keyboardCountry_id"
t.integer "keyboardLanguages_id"
t.datetime "created_at"
t.datetime "updated_at"
end
add_index "lang_regions", ["keyboardCountry_id"],
name: "index_lang_regions_on_keyboardCountry_id",
using: :btree add_index "lang_regions",
["keyboardLanguages_id"],
name: "index_lang_regions_on_keyboardLanguages_id",
using: :btree
我尝试获取数据的查询是:select keyboardCountry_id from lang_regions;
但我无法使用lang_regions
keyboardCountry_id
获取数据
错误是:column "keyboardlanguages_id" does not exist in lang_regions table
。
任何人都可以帮我找到解决此问题的方法。
答案 0 :(得分:1)
在我对该问题的评论中找到:
如果您使用所有大写字符或camelCasing的标识符(在您的情况下为列名),则必须在查询中对它们进行双引号以保持区分大小写。如果您没有双重引用您的标识符,它们将折叠为全部小写。为什么?因为SQL规范规定了它,而PostgreSQL试图尽可能地遵守它。
因此您的原始查询:
select keyboardCountry_id from lang_regions;
应该成为:
select "keyboardCountry_id" from lang_regions;
另一种更具可扩展性的方法可能是将这个camelCasing全部放在一起,并将列重命名为全小写。这些将使更容易阅读的查询和避免这一陷阱(并使您的查询更符合SQL规范)。