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因为你只需要在另一个表中存在的字段。

此外,不要使用双引号的字段和表名,因为那样的话数据库将需要区分大小写,通常不区分大小写的名称。 如果需要,可以使用小写名称,并始终使用小写字母。

数字也不需要被引用,当系统必须将它们从文本转换为数字时,它将引起更多的处理。