我正在使用Postgresql.
我有一个有3个字段的桌子
人,食谱和成分
我有一个有3个字段的桌子
人,食谱和成分
person = creator of the recipe recipe = the recipe ingredient = one of the ingredients in the recipe
我想创建一个查询,这个查询导致每个人每次添加胡萝卜到食谱时,该人还必须在同一食谱中添加盐.
不止一个人可以创建配方,在这种情况下,添加成分的人将被记入添加成分.有时,即使是同一个人,该成分也会被使用不止一次.
如果这个表:
person1,rec1,carrot person1,salt person1,rec2,pepper person2,carrot person2,salt person2,pepper person3,sugar person3,carrot
然后我想要这个结果:
PERSON1
“胡萝卜只会影响结果.我只想要在他们的食谱中添加至少一根胡萝卜的人,但我不希望那些没有添加盐的人加入他们添加的所有相同食谱中胡萝卜来.抱歉,但我无法解释清楚.“
解决方法
这个怎么样:
SELECT disTINCT person FROM tableName WHERE ingredient IN('carrot','salt') GROUP BY person,recipe HAVING SUM(CASE WHEN ingredient = 'carrot' THEN 1 ELSE -1 END) <= 0 AND COUNT(disTINCT ingredient) > 1;
我承认我没有太多使用Postgresql的经验,但查询似乎给出了你在SQL Fiddle中所需的结果(归功于@JohnWoo提供的开始).
我已经更新了答案;在它返回的用户之前,只有他们的一些食谱中的盐作为合法的.第二个HAVING子句过滤掉了这种情况.
更新:上一个查询返回了所有拥有至少一个遵循规则的配方的所有者(“对于每个添加的胡萝卜添加盐也是”).但是你(似乎)实际上需要遵循规则的所有食谱.所以查询看起来像……
SELECT disTINCT person FROM tableName WHERE person NOT IN ( SELECT person FROM tableName WHERE ingredient IN('carrot','salt') GROUP BY person,recipe HAVING SUM(CASE WHEN ingredient = 'carrot' THEN 1 ELSE -1 END) > 0 );
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。