mysql获取相对于另一个值在给定条件上不存在的行

时间:2016-03-05 06:22:42

标签: mysql

我有一张如下表:

+-----+-------+
| uid | value |
+-----+-------+
| 104 |   L   |
| 104 |   M   |
| 104 |   N   |
| 103 |   Q   |
| 101 |   N   |
| 102 |   L   |
+-----+-------+

现在我正在寻找的是得到104的值,并将其与其他uid进行比较,如果没有找到则返回值,如下所示:

+-----+-------+
| uid | value |
+-----+-------+
| 101 |   L   |
| 101 |   M   |
| 102 |   M   |
| 102 |   N   |
| 103 |   L   |
| 103 |   M   |
| 103 |   N   |
+-----+-------+

这里,104得到L,M和N,所以我正在寻找没有L,M或N(相对于104的值)的其他uid的值,请注意,103得到Q,但是它不是104,我试图与104进行比较,Q在这里不相关,如何在mysql中得到它?

2 个答案:

答案 0 :(得分:2)

根据CROSS JOINLEFT JOIN尝试以下查询。

SELECT 
DISTINCT finalTable.uid,
finalTable.`value`
FROM 
(SELECT
    YOUR_TABLE.uid,
    t.`value`
FROM    YOUR_TABLE
CROSS JOIN (
        SELECT
            *
        FROM YOUR_TABLE
        WHERE   uid = 104
    ) t
WHERE   YOUR_TABLE.uid != 104
AND t.`value`   <> YOUR_TABLE.`value`
) finalTable 
LEFT JOIN YOUR_TABLE ON YOUR_TABLE.uid = finalTable.uid AND YOUR_TABLE.`value` = finalTable.`value`
WHERE YOUR_TABLE.uid IS NULL
ORDER BY finalTable.uid;

请参阅Demo Here

答案 1 :(得分:1)

SELECT DISTINCT a.uid
           FROM my_table a
           LEFT 
           JOIN my_table b
             ON b.value <> a.value
            AND b.uid = 104
          WHERE a.uid <> 104
            AND b.uid IS NULL

或类似的东西