【发布时间】:2019-07-24 18:11:56
【问题描述】:
在我的查询中,我使用连接表category_attributes。假设我们有这样的行:
category_id|attribute_id
1|1
1|2
1|3
我想要满足以下两个需求的查询。我有一个允许的变量(php)attribute_id's。如果数组是 attribute_id 的子集,则应选择 category_id,否则 - 没有结果。
第一种情况:
select * from category_attributes where (1,2,3,4) in category_attributes.attribute_id
应该没有结果。
第二种情况
select * from category_attributes where (1,2,3) in category_attributes.attribute_id
应该给出所有三行(参见开头的虚拟行)。
所以我想了解标准 SQL in 所做的事情的反面。
【问题讨论】:
-
可以多行有相同的
attribute_id吗?如果是这样,您如何决定返回哪个category_id? -
@Nick 实际上是的。但我有非常复杂的查询。我不会直接使用select。我只需要
where部分。整个查询在category_id上有join。所以根据我的估计,加入后的结果会像提供的虚拟表一样。我需要过滤该表。我尝试了右连接,不同的位置,子查询。我不知道如何执行我的任务。 -
知道这个问题以前没有人问过,真是令人惊讶。
-
@Anees 对我来说,更令人惊讶的是,我被否决了两次。不知道为什么。不过同意。我开始认为我做事的方式不对。然而,没有人提出任何简单的解决方案。
-
这可能是因为这个问题乍一看很傻。但实际上是有效的,甚至是有趣的(你得到了我的 +1)。应该有一个更简单的解决方案。
标签: mysql sql select where where-in