筛选匹配列表中所有项目的行
假设您有两个表,“cars”和“passedtest”,您需要一种方法来识别已通过特定测试集的汽车。“passedtest”表记录每辆车通过的测试。
一种实现此目标的方法是使用IN语句。但是,此方法可能无法提供所需的结果,因为它返回即使通过指定列表中的一个测试的汽车。要匹配所有行中列表中的所有值,需要另一种解决方案。
以下SQL查询利用GROUP BY和HAVING子句来完成此任务:
<code class="language-sql">SELECT carname FROM PassedTest GROUP BY carname HAVING COUNT(DISTINCT testtype) = 4</code>
此查询首先按“carname”列对“passedtest”表中的行进行分组。然后,它使用COUNT(DISTINCT)函数计算每辆车的不同“testtype”值的计数。HAVING子句用于筛选结果,仅选择不同测试类型计数等于4的汽车(假设列表中有四个测试)。
您还可以使用此查询的结果作为嵌套语句,从“cars”表中提取其他信息:
<code class="language-sql">SELECT * FROM cars WHERE carname IN ( SELECT carname FROM PassedTest GROUP BY carname HAVING COUNT(DISTINCT testtype) = 4 )</code>
此扩展查询将为满足指定条件的车辆从“cars”表中检索所有相关数据。
以上是如何使用 SQL 选择列表中通过所有测试的汽车?的详细内容。更多信息请关注PHP中文网其他相关文章!