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