Postgres SQL 加入多对多关系

Postgres SQL Joins for Many To Many Relationship

现在我是 "learning" 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 查询生成器?或者您还有其他如何系统地创建查询的技巧吗?

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

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

您的主要错误在于联接。如果您这样做 'something' = 'other',那么您正在比较 字符串文字 ,而不是从数据库中获取任何内容。所以这总是 return false。你会想要比较 table1.field1 = table2.field2

另一件事是LEFT OUTER JOIN。我很确定你想要一个 INNER JOIN 因为你只想要存在于另一个 table.

中的字段

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

数字也不需要用引号引起来,这只会在系统将它们从文本转换为数字时造成更多处理。