Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 在单个查询中与第二个表联接时从表中获取所有项_Mysql - Fatal编程技术网

Mysql 在单个查询中与第二个表联接时从表中获取所有项

Mysql 在单个查询中与第二个表联接时从表中获取所有项,mysql,Mysql,我有两张桌子: CREATE TABLE IF NOT EXISTS `groups2rights` ( `groups2rights_group_id` int(11) NOT NULL default '0', `groups2rights_right` int(11) NOT NULL default '0', PRIMARY KEY (`groups2rights_group_id`,`groups2rights_right`), KEY `groups2rights_

我有两张桌子:

CREATE TABLE IF NOT EXISTS `groups2rights` (
  `groups2rights_group_id` int(11) NOT NULL default '0',
  `groups2rights_right` int(11) NOT NULL default '0',
  PRIMARY KEY  (`groups2rights_group_id`,`groups2rights_right`),
  KEY `groups2rights_right` (`groups2rights_right`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `groups2rights` (`groups2rights_group_id`, `groups2rights_right`) VALUES (1, 35);

CREATE TABLE IF NOT EXISTS `rights` (
  `right` int(11) NOT NULL auto_increment,
  `right_name` varchar(255) default NULL,
  `description` text NOT NULL,
  `category` int(11) NOT NULL default '0',
  PRIMARY KEY  (`right`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=36 ;

INSERT INTO `rights` (`right`, `right_name`, `description`, `category`) VALUES
(33, 'admin_right_group_add', '', 100),
(34, 'admin_right_group_edit', '', 0),
(35, 'admin_right_group_delete', '', 0);

ALTER TABLE `groups2rights` ADD CONSTRAINT `groups2rights_ibfk_4` FOREIGN KEY (`groups2rights_right`) REFERENCES `rights` (`right`) ON DELETE CASCADE;
现在,我尝试选择所有可用的
权限
,并获取该组是否分配了权限,但不知何故,我丢失了一些权限。查询:

SELECT r.*,g2r.groups2rights_group_id
FROM rights AS r
LEFT JOIN groups2rights AS g2r ON (g2r.groups2rights_right=r.right)
WHERE g2r.groups2rights_group_id=<<ID>> OR g2r.groups2rights_group_id IS NULL
ORDER BY r.category,r.right_name ASC
选择r.*,g2r.groups2rights\u group\u id
从作为r的权利
以g2r ON(g2r.groups2rights\u right=r.right)的形式左加入组2权限
其中g2r.groups2rights\u group\u id=或g2r.groups2rights\u group\u id为空
按r.category、r.right\u name ASC排序
有什么想法吗

编辑: 更新了代码


预期结果为3行,其中2行为空字段,另一行为值集。

是否要返回在正确表中找到的所有结果?在这种情况下,应该使用右连接。这将返回右表中的所有结果,而不管它是否与左表匹配


那么您想返回在正确表中找到的所有结果吗?在这种情况下,应该使用右连接。这将返回右表中的所有结果,而不管它是否与左表匹配

如果你这样做

SELECT r.*,g2r.group_id
FROM rights AS r
LEFT JOIN groups2rights AS g2r ON (g2r.right=r.right)
WHERE g2r.group_id=<<#id>> OR g2r.group_id IS NULL
ORDER BY r.category,r.right_name ASC
这应该行得通。

如果行的话

SELECT r.*,g2r.group_id
FROM rights AS r
LEFT JOIN groups2rights AS g2r ON (g2r.right=r.right)
WHERE g2r.group_id=<<#id>> OR g2r.group_id IS NULL
ORDER BY r.category,r.right_name ASC

这应该是可行的。

在查询中没有什么不正确的地方-您可以发布具有预期/实际结果的样本数据吗?在查询中没有什么不正确的地方-您可以发布具有预期/实际结果的样本数据吗?不,他的表称为“权限”。我也困惑了一会儿;)这就是我在工作时略读一个问题所得到的,哈哈。看起来答案已经给出了,所以我想没有伤害没有犯规。不,他的桌子叫“权利”。我也困惑了一会儿;)这就是我在工作时略读一个问题所得到的,哈哈。看起来答案已经给出了,所以我想没有伤害没有犯规。谢谢,我想我必须使用一个辅助选择,只是不知道在哪里以及如何。。。谢谢!接球不错,约翰,不知什么原因,那球正好越过了我的头顶。一定已经需要一只红牛了…谢谢,我想我必须使用一个子选择只是不知道在哪里和如何。。。谢谢!接球不错,约翰,不知什么原因,那球正好越过了我的头顶。一定已经需要一只红牛了。。。