Postgres SQLjoin了多对多的关系
现在我正在“学习”Postgres SQL。 我有3个表格:
1)用户:userId
2)堆栈:stackId
3)User_Stack:userId,stackId
现在我想获取属于一个用户的所有堆栈,给定userId。 我知道我需要使用联接,但那是我卡住了…我尝试这样的:
SELECT * FROM "Stack" LEFT OUTER JOIN "User_Stack" ON ('User_Stack.stackId' = 'Stack.stackId') WHERE "userId" = '590855';
错误:返回的数据是空的。
PS:那里有没有GUI查询生成器? 或者你有任何其他技巧如何系统地创build查询?
编辑:如果我改变这个查询:
SELECT * FROM "Stack" INNER JOIN "User_Stack" ON (User_Stack.stackId = Stack.stackId) WHERE "userId" = '590855';
我得到以下错误:
Kernel error: ERROR: missing FROM-clause entry for table "user_stack" LINE 1: SELECT * FROM "Stack" INNER JOIN "User_Stack" ON (User_Stack...
你的主要错误是在join。 如果你做'something' = 'other'
你比较string文字 ,没有从数据库中得到任何东西。 所以这总是会返回false。 你会想比较table1.field1 = table2.field2
另一件事是LEFT OUTER JOIN
。 我很确定你想要一个INNER JOIN
因为你只需要在另一个表中存在的字段。
此外,不要使用双引号的字段和表名,因为那样的话数据库将需要区分大小写,通常不区分大小写的名称。 如果需要,可以使用小写名称,并始终使用小写字母。
数字也不需要被引用,当系统必须将它们从文本转换为数字时,它将引起更多的处理。