假设数据库中有几个表,其中包含一些字段:
表“Builder”:ID_BUILDER,其他字段...
表“项目”:ID_PROJECT、ID_BUILDER、ID_RESOURCE、其他字段...
表“资源”:ID_RESOURCE、ID_BUILDER、其他字段...
我的问题是:
我怎样才能获得ID_BUILDER和那个只做了一个项目(没有更多)并且使用了一个没有被任何其他项目使用过的资源的构建器的名称?可以说明这一点的例子可以是:
制表程序|ID_构建者|名称|
|----------|--------------|
|1 |古斯塔夫·埃菲尔|
|2 |埃及人|
|3 |我|
表项目|ID_项目|名称|ID_构建者|
|----------|------------|-----------|
|1 |埃菲尔铁塔| 1 |
|2 |莱昂贝尔福| 1 |
|3 |金字塔| 2 |
|4 |纸花| 3 |
表资源|ID_资源|名称|ID_项目|
|-----------|------|------------|
|1 |钢| 1 |
|2 |石| 2 |
|2 |石| 3 |
|3 |纸| 4 |
查询将询问刚刚完成一个项目的构建者的ID,并且答案应该是{3,Me},因为Me刚刚完成了1个项目并且只使用了1个资源,而其他任何项目都没有使用(Gustav Eiffel已经完成了2个项目,Egipcians在他们唯一的项目Pyramids中使用了石头,但是石头也被用于LionBelfort项目)
我一直在尝试用途:
但我找不到答案。有什么需要帮忙的吗?
1条答案
按热度按时间wnrlj8wa1#
此查询包含计算资源在不同项目中使用的次数的列:
您可以使用经典的group-by-having方法来连接这个子查询,并仅获取count_resources=1的行:
dbfiddle demo