我正在尝试获取某些多个 col2 值的 col1 值。例如:我想查看 col2 的“1、2、3、4”值(即 col1 中的“1”)的 col1 值。另一个例子:col2 的 "1, 2" 的 col1 值为 "1, 2"。我怎样才能在 SQL 语法中做到这一点?
问问题
100 次
3 回答
5
你想要的是所谓的关系划分。有几种方法可以实现它。检查这个问题,它有十多个不同的解决方案来解决类似的问题 - 包括基准:How to filter SQL results in a has-many-through relationship
这是其中一种方式(假设(col1, col2)
组合是唯一的):
SELECT col1
FROM tableX
WHERE col2 IN (1, 2, 3, 4)
GROUP BY col1
HAVING COUNT(*) = 4 --- the size of the above list
另一个:
SELECT t1.col1
FROM tableX AS t1
JOIN
tableX AS t2
ON t2.col1 = t1.col1
AND t2.col2 = 2
JOIN
tableX AS t3
ON t3.col1 = t1.col1
AND t3.col2 = 3
JOIN
tableX AS t4
ON t4.col1 = t1.col1
AND t4.col2 = 4
WHERE t1.col2 = 1
于 2012-03-25T08:57:44.313 回答
2
可能这会有所帮助:
SELECT col1 FROM MyTable WHERE col2 IN ('1', '2', '3', '4')
这将返回col2
“1”、“2”、“3”或“4”的所有行。
即在您的示例中,上述查询将返回
col1
---------
1
1
1
1
2
2
如果你添加一个DISTINCT
子句,你只会得到不同的 col1 值:
SELECT DISTINCT col1 FROM MyTable WHERE col2 IN ('1', '2', '3', '4')
会回来
col1
---------
1
2
在你的例子中。
于 2012-03-25T08:19:33.157 回答
0
你不能用 SQL 做你解释的事情。从你的评论来看:
我想显示 col2 中“必须”具有“1,2,3,4”的 col1 值。在示例中,col1 的“1”值具有“1,2,3,4”,col1 的“1”值在其 col2 中只有“1,2”,因此使用此语句,我应该只看到 col1 的“1”值作为结果. 但是,它也给出了 col1 的“2”值
我认为序列很重要。由于每一行在您的数据集中的位置并不是唯一的,因此您不能简单地使用 SQL 来完成。您将不得不使用某种编程语言(C、java、php……任何您喜欢的语言)加载您的数据集,并循环通过您的数据集并以这种方式检查这些序列。
于 2012-03-25T08:38:45.550 回答