[英]What is the correct way to fetch data from PostgreSQL?
我是PostgreSQL的新手。 我創建了2個表:1個保存帳戶數據的帳戶表和1個帳單。
CREATE TABLE account (
id UUID DEFAULT uuid_generate_v1() PRIMARY KEY UNIQUE NOT NULL,
first_name VARCHAR(255) NOT NULL,
last_name VARCHAR(255) NOT NULL,
email VARCHAR(60) UNIQUE NOT NULL,
password VARCHAR(60) NOT NULL
);
CREATE TABLE posts (
id UUID DEFAULT uuid_generate_v1() PRIMARY KEY UNIQUE NOT NULL,
account_id UUID DEFAULT uuid_generate_v1() REFERENCES account(id),
post TEXT
);
當我嘗試在1個查詢中獲取有關用戶帳戶+帖子的數據時,我得到以下信息:
[
{
"id": ".....",
"first_name": "Name",
"last_name": "Last Name",
"email": "test@test.com",
"post": "test"
},
{
"id": "......",
"first_name": "Name",
"last_name": "Last Name",
"email": "test@test.com",
"post": "test 1"
}
]
這是我用來獲取數據的功能
static get_all_account_data({ id }) {
return new Promise((resolve, reject) => {
pool.query(
`SELECT
account.id,
first_name,
last_name,
email,
post
FROM account INNER JOIN posts
ON posts.account_id = account.id
WHERE account.id=$1
`,
[id],
(e, response) => {
if(e) return reject(e);
resolve(response.rows)
}
)
})
}
這是獲取數據的正確方法嗎? 返回重復的數據似乎是錯誤的代碼? 我聽說過子查詢。 我是否需要操縱響應以僅擁有一組帳戶數據?
根據您上面的評論:
因此,手頭的問題將是制作一個函數並返回僅包含一組帳戶數據和所有帖子的新obj?
可以使用Postgresql以多種方式完成此操作。 我能想到的一種方法是使用LATERAL JOIN
並將“帖子” 聚合到一個數組中:
SELECT
account.id,
first_name,
last_name,
email,
jsonb_agg(post) AS posts
FROM
account
LEFT JOIN LATERAL (
SELECT
post
FROM
posts
WHERE
posts.account_id = account.id) post ON TRUE
GROUP BY
account.id
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.