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我以前遇到过这个问题。我不知道什么时候使用
或或和。我需要读更多关于德·摩根定律的书。