有很多 mysql 个查询
Has Many mysql query
我有一个包含用户 table 和答案 table 的数据库。每个用户有 30 个答案。我想在一行中导出用户及其所有答案。
例如:
ID | email | answer_1 | answer_2 | answer_3 | etc...
----|---------|----------|----------|----------|--------
1 | e@g.com | foo | bar | baz | ....
我目前有
SELECT *
FROM users
LEFT JOIN answers AS A
ON users.id = A.user_id
WHERE email IS NOT NULL
这为每位用户创建了 30 行,其中包含他们对每一行的回答。我如何将其分组为每个用户一行,每个答案一列?
您可以尝试使用数据透视查询,如下所示:
SELECT uid, email,
MAX(CASE WHEN a.aid = 1 THEN a.answer END) AS answer_1,
MAX(CASE WHEN a.aid = 2 THEN a.answer END) AS answer_2,
MAX(CASE WHEN a.aid = 3 THEN a.answer END) AS answer_3
-- add more CASE expressions to cover all 30 answers
FROM users u
LEFT JOIN answers a
ON u.id = a.user_id
WHERE u.email IS NOT NULL
GROUP BY u.id, u.email
假设:answers
table 有一个 id 列来标识和编号 30 个答案中的每一个。没有这个,查询可能会很痛苦。我还假设每个用户将恰好有 30 个答案。如果答案不存在,则缺失的答案将显示为 NULL
。
我有一个包含用户 table 和答案 table 的数据库。每个用户有 30 个答案。我想在一行中导出用户及其所有答案。
例如:
ID | email | answer_1 | answer_2 | answer_3 | etc...
----|---------|----------|----------|----------|--------
1 | e@g.com | foo | bar | baz | ....
我目前有
SELECT *
FROM users
LEFT JOIN answers AS A
ON users.id = A.user_id
WHERE email IS NOT NULL
这为每位用户创建了 30 行,其中包含他们对每一行的回答。我如何将其分组为每个用户一行,每个答案一列?
您可以尝试使用数据透视查询,如下所示:
SELECT uid, email,
MAX(CASE WHEN a.aid = 1 THEN a.answer END) AS answer_1,
MAX(CASE WHEN a.aid = 2 THEN a.answer END) AS answer_2,
MAX(CASE WHEN a.aid = 3 THEN a.answer END) AS answer_3
-- add more CASE expressions to cover all 30 answers
FROM users u
LEFT JOIN answers a
ON u.id = a.user_id
WHERE u.email IS NOT NULL
GROUP BY u.id, u.email
假设:answers
table 有一个 id 列来标识和编号 30 个答案中的每一个。没有这个,查询可能会很痛苦。我还假设每个用户将恰好有 30 个答案。如果答案不存在,则缺失的答案将显示为 NULL
。