我需要以有条件的方式基于 2 个不同的表为用户获取允许的 itemTypes。如果用户 userGroup 在表中有任何条目,它应该只显示ANDuserGroupItemTypes
之间共有的项目,但如果该用户 userGroup中不存在条目,那么它应该只从userGroupItemTypes
clientItemTypes
userGroupItemTypes
clientItemTypes
项目类型
itID itemType
1 Item 1
2 Item 2
3 Item 3
客户
cID client
1 Client 1
用户组
ugID userGroup
1 Group 1
2 Group 2
用户
uID user cID ugID
1 Fred 1 1
2 Sam 1 2
客户项目类型
cID itID
1 1
1 2
1 3
userGroupItemTypes
ugID itID
2 1
2 2
结果应该是:
uID itID user itemType
1 1 Fred Item 1
1 2 Fred Item 2
2 1 Sam Item 1
2 2 Sam Item 2
2 3 Sam Item 3
基本上我认为查询的功能应该如下:
SELECT u.uID, it.itID, u.user, it.itemType
FROM users u
INNER JOIN clientItemTypes cit ON cit.cID = u.CID
INNER JOIN itemTypes it ON it.itID = cit.itID
IF((SELECT COUNT(*) FROM userGroupItemTypes GROUP BY uID) > 0, INNER JOIN userGroupItemTypes ugit ON ugit.ugID = u.ugID, DO NOTHING)
但我不知道如何实际实现这一点。任何帮助将不胜感激
编辑:这是一个dbfiddle
根据 Lennarts 的建议,我使用了 UNION 来获得我需要的结果:
小提琴手
基本上运行相同的查询两次,一次要求 userGroup 有 itemTypes,另一个要求 userGroup 没有 itemTypes,然后使用联合来组合结果。
我不确定这是否是最有效的方法,但除非我能找到另一种方法,否则它必须这样做。
替代解决方案(感谢 Lennart):
使用
EXISTS
和NOT EXISTS
小提琴手