我有以下表结构(DDL):
CREATE TABLE restricted_components
(
component_id INT(11) PRIMARY KEY NOT NULL,
resources_id INT(11) NOT NULL,
component_dom_id VARCHAR(50) NOT NULL,
component_dom_class VARCHAR(50),
component_dom_data_name VARCHAR(50),
visible TINYINT(1) DEFAULT '0' NOT NULL
);
CREATE TABLE resources
(
resources_id INT(10) unsigned PRIMARY KEY NOT NULL AUTO_INCREMENT,
resources_name VARCHAR(64) NOT NULL,
menu_href VARCHAR(128),
menu_text VARCHAR(64) NOT NULL
);
CREATE TABLE acl_groups_to_resources
(
groups_id INT(10) unsigned NOT NULL,
resources_id INT(10) unsigned NOT NULL,
bitmask SMALLINT(6) DEFAULT '0' NOT NULL,
CONSTRAINT `PRIMARY` PRIMARY KEY (groups_id, resources_id)
);
CREATE TABLE groups
(
groups_id INT(11) PRIMARY KEY NOT NULL AUTO_INCREMENT,
groups_name VARCHAR(50) NOT NULL
);
我正在尝试restricted_components
从其余表中获取相关信息的列表,这意味着resources_name
和groups_name
。
我做了这个查询:
SELECT
`rc`.*,
`rs`.resources_name,
`gr`.`groups_name`
FROM `restricted_components` AS `rc`
LEFT JOIN `resources` AS `rs` ON rc.resources_id = rs.resources_id
LEFT JOIN `acl_groups_to_resources` AS `acl_gr` ON rs.resources_id = acl_gr.resources_id
LEFT JOIN `groups` AS `gr` ON acl_gr.groups_id = gr.groups_id
但这是错误的,因为我有不想要的结果,如下图所示:
我确定问题出在 上,LEFT JOIN
但我找不到确切的位置和解决方法。
更新 #1:使用JOIN
instead 也不起作用。
我相信问题出在数据上,但我一点也不确定,希望有人有时间检查一下。
我能得到什么帮助吗?
注意:我在这里留下了一组数据,因此您可以在需要时使用它但不准确,您需要删除一些列及其值。
玩 LEFT + INNER 你可以改变 SQL 查询的逻辑
如果您需要来自restricted_component的所有内容 - LEFT JOIN 但是因为组必须适用于所有人 - INNER
来自您的数据集的结果