SQL获取具有相同列A但不同B的记录

mel*_*kes 4 sql postgresql query-performance

假设我们有以下表格meals:

| meal  | stars |
-----------------
| steak |   1   |
| steak |   2   |
| fish  |   4   |
| fish  |   4   |
| salad |   5   |

如何获得同一顿饭但不同星星的记录?我需要只有不同星星的记录.

上表的结果应如下:

| meal  | stars |
-----------------
| steak |   1   |
| steak |   2   |

我尝试过以下查询:

SELECT DISTINCT t1.*
FROM meals t1
INNER JOIN meals t2 ON t1.meal = t2.meal
AND t1.stars <> t2.stars;
Run Code Online (Sandbox Code Playgroud)

但它耗费了太多时间和一些明显的内存.

我桌子的实际大小是:

SELECT pg_size_pretty(pg_relation_size('table_name')); 
 pg_size_pretty 
----------------
 2295 MB

所以我需要拿出别的东西,我正在寻求你的帮助!

Joh*_*Woo 7

SELECT  a.*
FROM    meals a
        INNER JOIN
        (
            SELECT  meal
            FROM    meals
            GROUP   BY meal
            HAVING  COUNT(DISTINCT stars) > 1
        ) b ON a.meal = b.meal
Run Code Online (Sandbox Code Playgroud)

OUTPUT

?????????????????
? MEAL  ? STARS ?
?????????????????
? steak ?     1 ?
? steak ?     2 ?
?????????????????
Run Code Online (Sandbox Code Playgroud)