Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL-逐步筛选_Sql_Postgresql 9.1 - Fatal编程技术网

SQL-逐步筛选

SQL-逐步筛选,sql,postgresql-9.1,Sql,Postgresql 9.1,我最近有这个问题。我试图删除列名上带有特定字符的行。为此,我创建了几个临时表,如下所示: CREATE TEMPORARY TABLE tri1 as SELECT * FROM loading WHERE postcode != 'n/a'; CREATE TEMPORARY TABLE tri2 as SELECT * FROM tri1 WHERE postcode != '--'; CREATE TEMPORARY TABLE tri3 as SELECT * FROM tri2 W

我最近有这个问题。我试图删除列名上带有特定字符的行。为此,我创建了几个临时表,如下所示:

CREATE TEMPORARY TABLE tri1 as
SELECT * FROM loading WHERE postcode != 'n/a';

CREATE TEMPORARY TABLE tri2 as
SELECT * FROM tri1 WHERE postcode != '--';

CREATE TEMPORARY TABLE tri3 as
SELECT * FROM tri2 WHERE postcode != 'n-a';

CREATE TEMPORARY TABLE tri4 as
SELECT * FROM tri3 WHERE postcode != '99999';
这个冗长的解决方案很有效

但是,我的第一次尝试是使用以下SQL查询:

CREATE TEMPORARY TABLE tri1 AS
SELECT * FROM loading WHERE (postcode != 'n/a' OR postcode != '--' OR postcode != 'n-a' OR postcode != '99999');
问题是,我得到的返回行数比我执行上述顺序级联临时表排序时少

为什么?


谢谢。

使用这么多临时表不是解决问题的方法。您只使用了一个查询,这是正确的,但您的逻辑是错误的。以下是更正后的查询:

CREATE TEMPORARY TABLE tri1 AS
SELECT * FROM loading
WHERE (postcode != 'n/a' AND postcode != '--' AND postcode != 'n-a' AND postcode != '99999');
问题是,我得到的返回行比我使用顺序级联临时表时少

你让记录从裂缝中溜走了。根据您的逻辑,记录必须包含所有要拒绝的条件。例如,一个没有'--'的记录将通过,即使它有'99999'


管理我上面给出的查询的逻辑规则称为De Morgan定律,你可以。

你能指定模式并给我们一些关于这个问题的背景知识吗?嗨@TimBiegeleisen,你需要什么样的上下文,模式是什么意思?你是说像表格之类的模式吗?谢谢@TimBiegeilsen我以前遇到过这个问题。我不知道什么时候使用
。我需要读更多关于德·摩根定律的书。