当前位置: 首页 > 面试题库 >

SQL:选择不包含任何具有特定值的行的ID的列

萧懿轩
2023-03-14
问题内容

我想选择不具有VAL =’current’的任何行的唯一ID(与多行关联)。

例如,在这样的表中:

PK | ID | VAL 
-------------
 1 | 23 | deleted
 2 | 23 | deleted
 3 | 23 | deleted
 4 | 45 | current
 5 | 45 | deleted
 6 | 45 | deleted
...|................

我希望它返回ID 23,因为它没有VAL
=’current’的行。请注意,在此表中,主键(PK)是唯一的,但ID不是唯一的(因此需要使用DISTINCT或GROUP BY)。

这是我在PHP中拥有的东西:

$conn = someConnect("");

// returns ids associated with the number of rows they have where VAL != 'current'
$sql = "SELECT id, count(*) FROM table WHERE val != 'current' GROUP BY id"

$stid = oci_parse($conn, $sql);
oci_execute($stid);

oci_fetch_all($stid, $arr, OCI_FETCHSTATEMENT_BY_ROW);

foreach ($arr as $elm) {
   $id = key($elm);
   $non_current_count = $elm[$id];

   // counts the number of rows associated with the id, which includes VAL = 'current' rows
   $sql2 = "SELECT count(*) FROM table WHERE id = $id";

   $stid2 = oci_parse($conn, $sql2);
   oci_execute($stid2);
   $total_count = oci_fetch_array...
   if ($total_count != $non_current_count) {
      $output[] = $id;
   } 
   ...
}

oci_close($conn);

这就是它的总要旨。如您所见,完成此任务需要两个SQL语句。有没有更短的方法可以做到这一点?


问题答案:
SELECT DISTINCT id
FROM table
WHERE id NOT IN (SELECT id
                 FROM table
                 WHERE val = 'current')

或者:

SELECT a.id
FROM table a
LEFT JOIN table b ON a.id = b.id AND b.val = 'current'
WHERE b.id IS NULL


 类似资料:
  • 问题内容: 说有这样的表: 字段名称很容易解释。我想选择同时具有1和3 的,因此在此示例中仅。我想到了类似的 清单,之后我想列出该组中存在的。我怎么做? 问题答案: 如果没有任何唯一约束,请尝试: 如果仅尝试检测两个值,请使用此子句: 如果post_id和tag_id都具有唯一约束,那么这也应该起作用:

  • 问题内容: 我想选择总计为特定值的行。 我的SQL(SQL Fiddle): 它应该计算总和为410000并获取行。同时它应该得到这样的东西: 如您所见,42552 + 367225 =409777。它选择了两行,总行数接近410000。 我已经尝试了一切,但是没有用:( 对不起,我的语言,我是德语。 问题答案: 您可以使用相关子查询来获取运行总计,并检索其运行总计小于指定数量的行。(请注意,我将

  • 问题内容: 如何在 不引用 SQL表达式中的 特定列的情况下 选择所有可能包含已知特定值的记录? 例如,我知道,某个 未知 列包含值“ xxx”,并且表中有 许多列 和记录。 谢谢你。 问题答案: 因此,您想对数据库进行类似于Google的免费文本搜索。可以做到,但表演将是Teh Suck!Google之所以快速,是因为它在其索引上具有索引,重复的数据存储,并且通常针对这种搜索进行总体优化。 无论

  • 问题内容: 我有一个包含患者,日期,药物和诊断的数据框。每个患者都有唯一的编号(’pid’),并且可能会或可能不会使用不同的药物治疗。 选择在某个时间点已接受某种药物治疗的所有患者的最佳实践是什么?由于我的数据集非常庞大,因此for循环和if语句是最后的选择。 例: 选择在某时已接受药物“ B”治疗的所有患者。请注意,必须包括该患者的所有条目,这不仅意味着用药物B进行的治疗,还包括 所有 治疗:

  • 问题内容: 我正在尝试查询sybase服务器,以获取我们为测试目的而持有的不同类型数据的示例。 我有一张看起来像下面的表格(摘要) 正如我提到的那样,我想要每种类型的示例,因此对于上表,它需要一个类似的结果集(实际上,我只想要ID): 我尝试了以下查询的多种组合,但它们要么是无效的SQL(对于sybase),要么返回了无效的结果 您知道如何实现此查询吗? 问题答案: 也许您必须使用聚合函数或用于列

  • 如何返回特定日期所在的行号? 类似这样的事情: