无法根据psql中另一个表的引用标识获取表值

时间:2015-01-09 03:50:16

标签: sql postgresql

我有3个表格,例如keyboard_countrieskeyboard_languageslang_regionslang_regions包含keyboard_countrieskeyboard_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

任何人都可以帮我找到解决此问题的方法。

1 个答案:

答案 0 :(得分:1)

在我对该问题的评论中找到:

如果您使用所有大写字符或camelCasing的标识符(在您的情况下为列名),则必须在查询中对它们进行双引号以保持区分大小写。如果您没有双重引用您的标识符,它们将折叠为全部小写。为什么?因为SQL规范规定了它,而PostgreSQL试图尽可能地遵守它。

因此您的原始查询:

select keyboardCountry_id from lang_regions; 

应该成为:

select "keyboardCountry_id" from lang_regions;

另一种更具可扩展性的方法可能是将这个camelCasing全部放在一起,并将列重命名为全小写。这些将使更容易阅读的查询和避免这一陷阱(并使您的查询更符合SQL规范)。