Postgres SQL加入多对多关系

时间:2015-08-13 09:59:12

标签: node.js postgresql many-to-many

现在我正在“学习”Postgres SQL。我有3张桌子:

1)用户:userId

2)Stack:stackId

3)User_Stack:userId,stackId

现在我想获取属于一个用户的所有堆栈,给定userId。我知道我需要使用Joins,但那就是我被卡住了...我试试这样:

SELECT * FROM "Stack" LEFT OUTER JOIN "User_Stack" ON ('User_Stack.stackId' = 'Stack.stackId') WHERE "userId" = '590855';

错误:返回的数据为空。

PS:那里有GUI查询构建器吗?或者您有任何其他提示如何系统地创建查询?

编辑:如果我将查询更改为:

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...

1 个答案:

答案 0 :(得分:1)

您的主要错误是在加入中。如果您执行'something' = 'other',则需要比较字符串文字,而不是从数据库中获取任何内容。所以这总是会返回false。您需要比较table1.field1 = table2.field2

另一件事是LEFT OUTER JOIN。我很确定你想要一个INNER JOIN,因为你只想要在另一个表中存在的字段。

此外,不要对字段和表名使用双引号,因为数据库将需要区分大小写,并且通常使用区分大小写的名称并不好。如果需要,可以使用小写名称,并始终以小写形式创建它们。

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