MySQL连接3个表和空行

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

我现在放弃我的加入,因为搜索原因创建一个视图-我需要帮助:/

这是我的桌子:

轮廓

使用者

准则

标准配置文件

我想从这些表中得到的是一个视图,每个概要文件有一行,还包括HABTM profiles_Rubrics中没有条目的概要文件。目前,我只能获得HABTM表中有条目的配置文件:

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