Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 选择表中具有两个以上匹配组合键的所有行_Mysql_Sql_Select - Fatal编程技术网

Mysql 选择表中具有两个以上匹配组合键的所有行

Mysql 选择表中具有两个以上匹配组合键的所有行,mysql,sql,select,Mysql,Sql,Select,我有一个复合表,我正在尝试选择pk2列中同时包含1和2的行。如您所见,我已经成功地编写了一个查询,通过使用JOIN来完成这项工作。。。是 啊没关系,但并不令人满意 我担心,当查询需要10个以上的约束时,如果在查询中添加更多的连接,代码会变得混乱和缓慢 有没有更快更干净的方法来获得相同的结果 假设: 在最坏的情况下,可能有10个以上的约束。不太可能,但可能 到目前为止我所尝试的: 我尝试使用UNION,但没有成功&我认为这是在性能效率方面最糟糕的选择之一 我试了一下(…)中的WHERE,但它和A或

我有一个复合表,我正在尝试选择pk2列中同时包含1和2的行。如您所见,我已经成功地编写了一个查询,通过使用JOIN来完成这项工作。。。是 啊没关系,但并不令人满意

我担心,当查询需要10个以上的约束时,如果在查询中添加更多的连接,代码会变得混乱和缓慢

有没有更快更干净的方法来获得相同的结果

假设:

在最坏的情况下,可能有10个以上的约束。不太可能,但可能

到目前为止我所尝试的:

  • 我尝试使用UNION,但没有成功&我认为这是在性能效率方面最糟糕的选择之一
  • 我试了一下(…)中的WHERE,但它和A或B的WHERE是一样的。。。这不是我想要的
  • 我尝试在FROM子句中进行子查询。。。但约束越多,噩梦就越严重
  • 这听起来像是“集合中的集合”查询。我喜欢通过
    分组
    拥有
    来接近它。这为处理许多不同情况提供了灵活的逻辑:

    SELECT t1.pk1
    FROM t1
    WHERE pk2 IN (1, 2)
    GROUP by t1.pk1
    HAVING COUNT(*) = 2;
    
    这假设表中的行是唯一的(否则使用
    COUNT(DISTINCT)


    是一个SQL FIDLE。

    另一种方法是按
    pk1
    分组并计算不同的
    pk2
    值。例如:

    SELECT   pk1
    FROM     t1
    WHERE    pk2 IN (1, 2)
    GROUP BY pk1
    HAVING   COUNT(DISTINCT pk2) = 2
    

    天哪,没想到会这么快得到答复。在我确认它正在工作并了解它现在是如何工作之前,我从来不知道会有这样的答复:)我会在11分钟后选择它作为答复。好像我不能在时间之前标记它。很好的变化。谢谢