合并 MYSQL 没有通用 table 表达式的查询
combine MYSQL queries without common table expression
我想从不同的 table 获取不同的数据。
我写了 3 个查询,但我无法合并这些查询。我尝试合并但没有得到实际值
SELECT user.user_id ,email,count(post_id) as posts
FROM user
left join post on user.user_id=post.user_id
group by user.user_id
SELECT user.user_id,GROUP_CONCAT(members.memberIds) as datas
FROM members
join user on user.user_id =members.user_id
GROUP BY user.user_id
SELECT user_id,
GROUP_CONCAT(
CASE
WHEN question.question_name = 'Household'
THEN answer.text
ELSE NULL
END
) AS Household,
GROUP_CONCAT(
CASE
WHEN question.question_name = 'Dependents'
THEN answer.text
ELSE NULL
END
) AS Dependents
FROM user_answers
inner join answer on user_answers.answer_id=answer.answer_id
inner join question on answer.question_id=question.question_id
GROUP BY user_id
这里我得到了 3 个结果。
我想要一个结果
我怎样才能得到这个?
当时我尝试加入我的第一个查询和第二个查询,但我在“数据”列中得到的值不正确
我该怎么做?
通过使用您的 SQL,我将创建以下查询:
SELECT
user.user_id,
user.email,
COUNT(post.post_id) as posts,
a.datas,
b.Household,
b.Dependents
FROM user
left join post on user.user_id=post.user_id
-- left join first query as subquery
LEFT JOIN (
SELECT user.user_id,GROUP_CONCAT(members.memberIds) as datas
FROM members
join user on user.user_id =members.user_id
GROUP BY user.user_id
) AS a
ON a.user_id = user.user_id
-- left join second query as subquery
LEFT JOIN (
SELECT user_id,
GROUP_CONCAT(
CASE
WHEN question.question_name = 'Household'
THEN answer.text
ELSE NULL
END
) AS Household,
GROUP_CONCAT(
CASE
WHEN question.question_name = 'Dependents'
THEN answer.text
ELSE NULL
END
) AS Dependents
FROM user_answers
inner join answer on user_answers.answer_id=answer.answer_id
inner join question on answer.question_id=question.question_id
GROUP BY user_id
) AS c
ON c.user_id = user.user_id
group by user.user_id
LEFT JOIN 是因为可能有用户没有数据 and/or 答案。
现在还有其他方法可以做到这一点,但是如果您当前的查询给出了所需的结果,那么子查询就没有问题。
我想从不同的 table 获取不同的数据。
我写了 3 个查询,但我无法合并这些查询。我尝试合并但没有得到实际值
SELECT user.user_id ,email,count(post_id) as posts
FROM user
left join post on user.user_id=post.user_id
group by user.user_id
SELECT user.user_id,GROUP_CONCAT(members.memberIds) as datas
FROM members
join user on user.user_id =members.user_id
GROUP BY user.user_id
SELECT user_id,
GROUP_CONCAT(
CASE
WHEN question.question_name = 'Household'
THEN answer.text
ELSE NULL
END
) AS Household,
GROUP_CONCAT(
CASE
WHEN question.question_name = 'Dependents'
THEN answer.text
ELSE NULL
END
) AS Dependents
FROM user_answers
inner join answer on user_answers.answer_id=answer.answer_id
inner join question on answer.question_id=question.question_id
GROUP BY user_id
这里我得到了 3 个结果。
我想要一个结果
我怎样才能得到这个?
当时我尝试加入我的第一个查询和第二个查询,但我在“数据”列中得到的值不正确
我该怎么做?
通过使用您的 SQL,我将创建以下查询:
SELECT
user.user_id,
user.email,
COUNT(post.post_id) as posts,
a.datas,
b.Household,
b.Dependents
FROM user
left join post on user.user_id=post.user_id
-- left join first query as subquery
LEFT JOIN (
SELECT user.user_id,GROUP_CONCAT(members.memberIds) as datas
FROM members
join user on user.user_id =members.user_id
GROUP BY user.user_id
) AS a
ON a.user_id = user.user_id
-- left join second query as subquery
LEFT JOIN (
SELECT user_id,
GROUP_CONCAT(
CASE
WHEN question.question_name = 'Household'
THEN answer.text
ELSE NULL
END
) AS Household,
GROUP_CONCAT(
CASE
WHEN question.question_name = 'Dependents'
THEN answer.text
ELSE NULL
END
) AS Dependents
FROM user_answers
inner join answer on user_answers.answer_id=answer.answer_id
inner join question on answer.question_id=question.question_id
GROUP BY user_id
) AS c
ON c.user_id = user.user_id
group by user.user_id
LEFT JOIN 是因为可能有用户没有数据 and/or 答案。
现在还有其他方法可以做到这一点,但是如果您当前的查询给出了所需的结果,那么子查询就没有问题。