假设我有下表:
CREATE TABLE person
(
key integer NOT NULL AI ,
name varchar NOT NULL DEFAULT 0,
column1 integer NOT NULL DEFAULT 0,
column2 integer NOT NULL DEFAULT 0,
column3 integer NOT NULL DEFAULT 0,
column4 integer NOT NULL DEFAULT 0,
column5 integer NOT NULL DEFAULT 0,
column6 integer NOT NULL DEFAULT 0,
CONSTRAINT pk PRIMARY KEY (key)
)
Run Code Online (Sandbox Code Playgroud)
现在我想要一个sql,它为我提供了一些行,这些行至少有两列不值为列column1到column6的值.
例如,如果我们有行
1 TEST 0 0 6 1 0 5
2 ABCD 0 0 0 0 0 5
3 DEFG 0 0 4 1 0 5
4 HIJK 0 0 0 1 0 0
Run Code Online (Sandbox Code Playgroud)
所以我的查询应返回ID 1和3,因为它们至少有2个非零列.
尝试这个:
SELECT *
FROM person
WHERE (column1 <> 0 + column2 <> 0 + column3 <> 0 +
column4 <> 0 + column5 <> 0 + column6 <> 0
) > 1;
Run Code Online (Sandbox Code Playgroud)
或者
SELECT p.*
FROM person p
INNER JOIN (SELECT A.key
FROM (SELECT p.key, p.column1 AS columnData FROM person p WHEN p.column1 <> 0
UNION ALL
SELECT p.key, p.column2 AS columnData FROM person p WHEN p.column2 <> 0
UNION ALL
SELECT p.key, p.column3 AS columnData FROM person p WHEN p.column3 <> 0
UNION ALL
SELECT p.key, p.column4 AS columnData FROM person p WHEN p.column4 <> 0
UNION ALL
SELECT p.key, p.column5 AS columnData FROM person p WHEN p.column5 <> 0
UNION ALL
SELECT p.key, p.column6 AS columnData FROM person p WHEN p.column6 <> 0
) AS A
GROUP BY A.key
HAVING COUNT(*) > 1
) AS A ON p.key = A.key;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
759 次 |
| 最近记录: |