让我知道我有下表list_level
| year | cat_id | user_id | id | val_1 | val_2 |
|------|--------|---------|------|-------|--------|
| 2017 | 2 | 141256 | 1501 | ABC | <null> |
| 2017 | 2 | 141256 | 1023 | DRF | <null> |
| 2017 | 1 | 141256 | 882 | TGV | 100 |
| 2016 | 2 | 141256 | 801 | ADG | 90 |
| 2016 | 1 | 141256 | 590 | IKM | 100 |
| 2016 | 1 | 141256 | 480 | EGM | 87 |
| 2015 | 2 | 141256 | 256 | YHX | 70 |
| 2015 | 1 | 141256 | 132 | QWE | 68 |
如何获取元组不是年份= 2017而不是cat_id = 2
我试过
SELECT
*
FROM
LIST_LEVEL
WHERE
YEAR <> '2017'
AND CAT_ID NOT IN (2)
但该查询返回
| year | cat_id | user_id | id | val_1 | val_2 |
|------|--------|---------|------|-------|--------|
| 2016 | 1 | 141256 | 590 | IKM | 100 |
| 2016 | 1 | 141256 | 480 | EGM | 87 |
| 2015 | 1 | 141256 | 132 | QWE | 68 |
我需要这个结果集
| year | cat_id | user_id | id | val_1 | val_2 |
|------|--------|---------|------|-------|--------|
| 2017 | 1 | 141256 | 882 | TGV | 100 |
| 2016 | 2 | 141256 | 801 | ADG | 90 |
| 2016 | 1 | 141256 | 590 | IKM | 100 |
| 2016 | 1 | 141256 | 480 | EGM | 87 |
| 2015 | 2 | 141256 | 256 | YHX | 70 |
| 2015 | 1 | 141256 | 132 | QWE | 68 |
最后,我结束了这个查询,但我觉得它有点复杂。
SELECT
*
FROM (
SELECT
*
FROM
LIST_LEVEL
WHERE
YEAR <> '2017'
UNION
SELECT
*
FROM
LIST_LEVEL
WHERE
CAT_ID NOT IN (2)
) T
我可以用其他方式编写此查询吗?
答案 0 :(得分:3)
我想你只想要or
:
SELECT ll.*
FROM LIST_LEVEL ll
WHERE ll.YEAR <> '2017' OR CAT_ID NOT IN (2) ;
或者,如果您愿意:
WHERE NOT (ll.YEAR = '2017' AND CAT_ID IN (2) ) ;
答案 1 :(得分:0)
SELECT
*
FROM
LIST_LEVEL
WHERE
YEAR <> '2017'
AND NOT EXISTS(SELECT * FROM
LIST_LEVEL
WHERE CAT_ID IN(2)