排除SQL或脚本中的ID


Exclude ids in SQL or in the script

我需要从SQL查询结果中按id排除一些行,但哪种方法更好?

通过主键id:使用NOT IN

SELECT id, key1, key2 FROM my_table WHERE id NOT IN (#EXCLUDE_IDS)

或者在脚本中查询后的后处理循环中:

 foreach ($rows as $i => $row) {
    if (isset($exclude[$row['id']])) {
      unset($rows[$i]);
    }
 }
 # or
 for ($i = count($rows) - 1; $i >= 0; $i--) {
    if (isset($exclude[$rows[$i]['id']])) {
      unset($rows[$i]);
    }
 }

从数据库查询时,您只想获得所需的信息,这就是为什么您可以选择select语句中的列,并能够使用where 中的条件

在这种情况下:1.如果您希望排除一个特定的主键,则

SELECT ID, KEY1, KEY2 FROM TABLE WHERE ID != 1

2.如果它基于多个id,则

SELECT ID, KEY1, KEY2 FROM TABLE WHERE ID NOT IN (ids)

3.如果您希望排除基于单独的查询,则

SELECT ID, KEY1, KEY2 FROM TABLE WHERE ID NOT IN(
    SELECT  ID
    FROM    TABLE2
    WHERE   ID IS NOT NULL )

NOT IN的另一种选择是"NOT EXISTS"

您应该获取所需的数据。因此,在排除那些id的查询中执行此操作是更好的选择。它还降低了执行和成本。

您需要的是使用下一个clouse:

SELECT id, key1, key2 FROM my_table WHERE id NOT REGEXP '[regexp]';

其中regexp描述了要排除的ID列表。