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 名称使用双引号,因为这样数据库将需要区分大小写,通常区分大小写的名称并不好。如果需要,您可以将它们与小写名称一起使用,并且始终以小写形式创建它们。
数字也不需要用引号引起来,这只会在系统将它们从文本转换为数字时造成更多处理。
现在我是 "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 名称使用双引号,因为这样数据库将需要区分大小写,通常区分大小写的名称并不好。如果需要,您可以将它们与小写名称一起使用,并且始终以小写形式创建它们。
数字也不需要用引号引起来,这只会在系统将它们从文本转换为数字时造成更多处理。