检查多列值

时间:2012-03-25 08:15:58

标签: mysql sql-match-all

我正在尝试获取某些多个col2值的col1值。例如:我想看到col2的“1,2,3,4”值的col1值(在col1中为“1”)。 col2的“1,2”的另一个例子:col1值是“1,2”。我如何设法在SQL语法中执行此操作?

Example image

3 个答案:

答案 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 ......你喜欢的任何东西)加载你的数据集,并循环遍历你的数据集并以这种方式检查这些序列。