我现在放弃了我的JOIN创建一个视图以寻找搜索原因 - 我需要帮助:/
以下是我的表格:
配置文件
id company user_id
1 ACME 2
2 Joe 4
3 Wolf 5
用户
id role_id online
2 4 2010-10-08
4 2 2010-10-08
5 4 2010-10-08
量规
id title
1 Steel
2 Stone
3 Wood
Profiles_Rubrics
profile_id rubric_id
1 1
1 2
2 3
2 1
我想从这些表中获得的是每个配置文件都有一行的视图 - 还包括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专家,因为从上面的所有内容可以看出:)
答案 0 :(得分:4)
你需要使用LEFT JOINS。
像
这样的东西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