MySQL的获取上不相对于另一个值给定的标准
问题描述:
我有一个表像下存在的行: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等的UID的值或N(相对于104的值),请注意,103得到Q,但由于它不在104,我试图与104比较,Q在这里不相关,ho W在MySQL中获取?
答
请尝试以下基于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;
答
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
或者类似的东西
+1
如果我错了,请对不起。但我不认为这个解决方案适用于'原始邮件'。 'OP'要求那些不存在的行['基于特定条件']。 – 1000111
+0
@subratadeypappu赦免 – Strawberry
似乎这里是远远高于查询绝对必要 – Strawberry
我的想法一样。但我接触的方式是“渐进式方法”。这就是为什么我不能忽略/减少任何东西。任何想法从你身边做得更好?我真的很感激! @strawberry – 1000111
左连接部分做什么? sql看起来没有它,如果数据量增加会影响一些东西吗? –