我正在尝试获取某些多个col2值的col1值。例如:我想看到col2的“1,2,3,4”值的col1值(在col1中为“1”)。 col2的“1,2”的另一个例子:col1值是“1,2”。我如何设法在SQL语法中执行此操作?
答案 0 :(得分:5)
您想要的是relational division。有几种方法可以实现它。检查此问题,该问题针对类似问题提供了十多种不同的解决方案 - 包括基准:How to filter SQL results in a has-many-through relation
以下是其中一种方式(假设(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
答案 1 :(得分: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
clause,则只能获得不同的col1值:
SELECT DISTINCT col1 FROM MyTable WHERE col2 IN ('1', '2', '3', '4')
会返回
col1
---------
1
2
在你的例子中。
答案 2 :(得分: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 ......你喜欢的任何东西)加载你的数据集,并循环遍历你的数据集并以这种方式检查这些序列。