mysql内连接产生的结果比它应该多
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了mysql内连接产生的结果比它应该多,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1118字,纯文字阅读大概需要2分钟。
内容图文
![mysql内连接产生的结果比它应该多](/upload/InfoBanner/zyjiaocheng/896/4e26b9e227104982b4e94ec9a5aa1ad8.jpg)
我试图获取角色名称,动词名称和特权启用值,其中特权是通过verb_id和roles_id外键加入动词和角色的连接表.
但我在加入时遇到问题:
SELECT roles.name, verbs.name, privileges.enabled FROM verbs, roles
INNER JOIN privileges on privileges.role_id = privileges.verb_id
它给了我更多的记录.有重复的记录,例如许多’更新学生’记录
verbs table:
id
name
roles table:
id
name
privileges table:
id
role_id
verb_id
enabled
动词通过特权有很多角色
角色通过特权有许多动词
我想显示角色名称,动词名称和权限启用值,其中特权role_id字段与verb_id字段相关联.因此,例如,如果角色id 1与动词id 18相关联,则特权表将具有role_id 1和verb_id 18以显示角色和动词之间的关系.所以我想选择该关系来显示关联角色名称,动词名称和启用权限的值.
解决方法:
为什么你使用两种语法,旧式动词,角色然后是明确的内部联接?使查询非常难以阅读,因为您没有任何where子句定义动词和角色之间的关系(这是使用旧式语法的最大问题之一),您基本上拥有前两个的笛卡尔积表,这可能解释了你的行数.
您需要在动词和角色之间定义连接列,并且最好将其放入具有适当INNER JOIN的ON子句中.例如.:
SELECT r.name, v.name, p.enabled
FROM verbs AS v
INNER JOIN privileges AS p
ON v.id = p.verb_id
INNER JOIN roles AS r
ON p.role_id = r.id;
内容总结
以上是互联网集市为您收集整理的mysql内连接产生的结果比它应该多全部内容,希望文章能够帮你解决mysql内连接产生的结果比它应该多所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。