【问题标题】:How to check if a row exists in SQL, by index OR by value?如何通过索引或值检查 SQL 中是否存在行?
【发布时间】:2022-01-08 18:10:11
【问题描述】:

假设我有一个包含以下列的电缆表:

id, type_id, is_working, box_id, cable_length

如果我想检查表中是否存在box_id,我该怎么做?

我应该检查表中的索引是否等于 NULL 还是应该检查列上的值是否等于 NULL?

如果需要任何澄清,我很乐意澄清问题。

非常感谢您

【问题讨论】:

  • 您想在哪里“检查它是否存在”?在查询中?在子查询中?作为 if 语句的一部分?等等等等,你试过什么?
  • 您可以执行以下操作: 从 myTable 中选择 *,其中 box_id 不为空。如果您正在检查特定 id,则: Select * from myTable where box_id =
  • 感谢您的回复。我的目标是在表中搜索一行,但在找到它并对其进行处理之前,我想知道它是否为 NULL。我应该如何检查它,通过表中的索引,还是通过行的值?
  • 您的问题不清楚。考虑添加一些示例数据和所需的结果。帮助我们帮助您并编辑您的问题以包含Minimal, Reproducible Example。另外,正如 sql 标记 描述所暗示的,请TAG your RDBMS

标签: sql null


【解决方案1】:

如果我正确理解了您的问题,您想知道电缆表中是否有任何行具有特定 box_id 值,对吗?

如果是这样,您可以根据查询的不同结果通过几种不同的方式对其进行检查。

  1. 您可以找到具有特定box_id 的所有行:
SELECT * FROM cables WHERE box_id = 3

这将为您提供box_id = 3 的所有行。(可能没有。)

  1. 您可以查看特定box_id 的行数。
SELECT COUNT(*) FROM cables WHERE box_id = 3

这为您提供box_id = 3 的行数。如果没有找到,则返回 0,而不是什么都没有。

  1. 您可以检查是否存在具有特定box_id 的行。
SELECT CASE WHEN COUNT(*) > 0 THEN TRUE ELSE FALSE END FROM cables WHERE box_id = 3

如果存在box_id = 3 的任何行,则返回true,否则返回false。 但是,我只在 PostgreSQL 数据库上尝试过这个查询,不确定它是否是对其他类型数据库的有效查询。

您可能更喜欢哪种方法取决于您。对我来说,第一个非常合适且最直接。

【讨论】:

  • 感谢您的回复。不幸的是,你误解了我的问题。我的目标是在表中搜索一行,但是在找到它之前,我想知道它是否为NULL。我应该如何检查它,通过表中的索引,或通过行的值?
猜你喜欢
  • 1970-01-01
  • 2011-01-09
  • 2011-08-17
  • 2021-07-22
  • 2021-10-05
  • 1970-01-01
  • 2012-11-01
  • 2013-03-21
  • 2016-03-21
相关资源
最近更新 更多