我有一张如下表:
+-----+-------+
| 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中得到它?
答案 0 :(得分:2)
根据CROSS JOIN
和LEFT 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
或类似的东西