MySQL连接3个表和空行
我现在放弃我的加入,因为搜索原因创建一个视图-我需要帮助:/ 这是我的桌子: 轮廓 使用者 准则 标准配置文件 我想从这些表中得到的是一个视图,每个概要文件有一行,还包括HABTM profiles_Rubrics中没有条目的概要文件。目前,我只能获得HABTM表中有条目的配置文件:MySQL连接3个表和空行,mysql,join,rows,has-and-belongs-to-many,Mysql,Join,Rows,Has And Belongs To Many,我现在放弃我的加入,因为搜索原因创建一个视图-我需要帮助:/ 这是我的桌子: 轮廓 使用者 准则 标准配置文件 我想从这些表中得到的是一个视图,每个概要文件有一行,还包括HABTM profiles_Rubrics中没有条目的概要文件。目前,我只能获得HABTM表中有条目的配置文件: CREATE OR REPLACE VIEW Catalog_Branches AS SELECT profiles.id, profiles.company, GROUP_CONCAT(DISTINC
CREATE OR REPLACE VIEW Catalog_Branches AS
SELECT
profiles.id,
profiles.company,
GROUP_CONCAT(DISTINCT CAST(rubrics.id AS CHAR) SEPARATOR ', ') AS rubric,
GROUP_CONCAT(DISTINCT CAST(rubrics.title AS CHAR) SEPARATOR ', ') AS rubric_title,
profiles.user_id
FROM
profiles,
profiles_rubrics
JOIN rubrics ON profiles_rubrics.rubric_id=rubrics.id,
users
WHERE
profiles_rubrics.profile_id=profiles.id
AND profiles_rubrics.rubric_id=rubrics.id
AND users.id=profiles.user_id
AND users.profile_online IS NOT NULL
AND users.role_id!=1
GROUP BY
profiles.id
我在stackoverflow的其他答案的帮助下尝试了它,但无法返回所有配置文件。我不是MySQL的专家,从上面的一切可以看出:您需要使用左连接 差不多
SELECT
profiles.id,
profiles.company,
GROUP_CONCAT(DISTINCT CAST(rubrics.id AS CHAR) SEPARATOR ', ') AS rubric,
GROUP_CONCAT(DISTINCT CAST(rubrics.title AS CHAR) SEPARATOR ', ') AS rubric_title,
profiles.user_id
FROM
profiles LEFT JOIN
profiles_rubrics ON profiles_rubrics.profile_id=profiles.id LEFT JOIN
rubrics ON profiles_rubrics.rubric_id=rubrics.id LEFT JOIN
users ON users.id=profiles.user_id
WHERE
users.profile_online IS NOT NULL
AND users.role_id!=1
GROUP BY
profiles.id
查看一下您需要使用左连接 差不多
SELECT
profiles.id,
profiles.company,
GROUP_CONCAT(DISTINCT CAST(rubrics.id AS CHAR) SEPARATOR ', ') AS rubric,
GROUP_CONCAT(DISTINCT CAST(rubrics.title AS CHAR) SEPARATOR ', ') AS rubric_title,
profiles.user_id
FROM
profiles LEFT JOIN
profiles_rubrics ON profiles_rubrics.profile_id=profiles.id LEFT JOIN
rubrics ON profiles_rubrics.rubric_id=rubrics.id LEFT JOIN
users ON users.id=profiles.user_id
WHERE
users.profile_online IS NOT NULL
AND users.role_id!=1
GROUP BY
profiles.id
看一看+1 Astander:看起来指向用户的链接可以是一个内部连接,而不抑制任何配置文件?这很好,正如预期的那样工作!非常感谢你!我不知道你可以像以前那样连接连接。在这个大问题上,错误的尝试是非常困难的:我现在要把它应用到我正在创建的另一个视图中!顺便说一句,WHERE子句中有一个输入错误:第一个,将导致查询失败-不知道您是否可以使用您的答案为即将到来的用户更正此错误。+1 Astander:看起来指向用户的链接可能是一个内部连接,而不抑制任何配置文件?这很好,工作正常!非常感谢你!我不知道你可以像以前那样连接连接。在这个大问题上,错误的尝试是非常困难的:我现在要把它应用到我正在创建的另一个视图中!顺便说一句,WHERE子句中有一个输入错误:第一个,将导致查询失败-不知道您是否可以使用您的答案为即将到来的用户更正此错误。
profile_id rubric_id
1 1
1 2
2 3
2 1
CREATE OR REPLACE VIEW Catalog_Branches AS
SELECT
profiles.id,
profiles.company,
GROUP_CONCAT(DISTINCT CAST(rubrics.id AS CHAR) SEPARATOR ', ') AS rubric,
GROUP_CONCAT(DISTINCT CAST(rubrics.title AS CHAR) SEPARATOR ', ') AS rubric_title,
profiles.user_id
FROM
profiles,
profiles_rubrics
JOIN rubrics ON profiles_rubrics.rubric_id=rubrics.id,
users
WHERE
profiles_rubrics.profile_id=profiles.id
AND profiles_rubrics.rubric_id=rubrics.id
AND users.id=profiles.user_id
AND users.profile_online IS NOT NULL
AND users.role_id!=1
GROUP BY
profiles.id
SELECT
profiles.id,
profiles.company,
GROUP_CONCAT(DISTINCT CAST(rubrics.id AS CHAR) SEPARATOR ', ') AS rubric,
GROUP_CONCAT(DISTINCT CAST(rubrics.title AS CHAR) SEPARATOR ', ') AS rubric_title,
profiles.user_id
FROM
profiles LEFT JOIN
profiles_rubrics ON profiles_rubrics.profile_id=profiles.id LEFT JOIN
rubrics ON profiles_rubrics.rubric_id=rubrics.id LEFT JOIN
users ON users.id=profiles.user_id
WHERE
users.profile_online IS NOT NULL
AND users.role_id!=1
GROUP BY
profiles.id