我已经看过其他答案,但我无法将答案应用到我的应用程序。我有一个返回类似的查询如下:每组最大的n,同时还返回内容
SELECT *
FROM MYTABLE T;
__________________________________________________________
| ID | AORB | ....OTHER (UNIQUE) CONTENT..... |
|---------------------------------------------------------|
| 1 | A | ....CONTENT |
| 1 | B | ....CONTENT |
| 2 | A | ....CONTENT |
| 3 | A | ....CONTENT |
| 3 | B | ....CONTENT |
| 4 | A | ....CONTENT |
| 5 | B | ....CONTENT |
| 6 | A | ....CONTENT |
| 6 | B | ....CONTENT |
-----------------------------------------------------------
正如你所看到的,也有偶尔与相同ID但不同的内容最多两行和A或B的AORB
有时有一个“唯一”ID为1,AORB
可以是A
或B
。
只是为了使数据结构清晰,你可以通过 'AORB' 过滤如下起来拆表:
所有A的:
SELECT *
FROM MYTABLE T
WHERE T.AORB = 'A';
__________________________________________________________
| ID | AORB | ....OTHER (UNIQUE) CONTENT..... |
|---------------------------------------------------------|
| 1 | A | ....CONTENT |
| 2 | A | ....CONTENT |
| 3 | A | ....CONTENT |
| 4 | A | ....CONTENT |
| 6 | A | ....CONTENT |
----------------------------------------------------------
所有B的:
SELECT *
FROM MYTABLE T
WHERE T.AORB = 'B';
__________________________________________________________
| ID | AORB | ....OTHER (UNIQUE) CONTENT..... |
|---------------------------------------------------------|
| 1 | B | ....CONTENT |
| 3 | B | ....CONTENT |
| 5 | B | ....CONTENT |
| 6 | B | ....CONTENT |
-----------------------------------------------------------
我需要一个类似于以下内容的查询,但将所有其他内容行返回到右侧:
SELECT ID, MIN(AORB)
FROM MYTABLE T
GROUPBY ID;
我的要求是,如果有两行具有相同的ID,返回行。如果给定ID只有一行,则返回该行,而不管AORB
。
我试着做了a和b的查询都不过的UNION由于内容是不同的,但它仍然会返回“重复”的ID:
SELECT *
FROM MYTABLE T
WHERE T.AORB = 'B'
UNION
SELECT *
FROM MYTABLE T
WHERE T.AORB = 'A';
这真的很棒,它正是我所需要的。我用'WITH'替换了MYTABLE,因为我的实际查询要复杂得多。 –