我努力找到了各种答案,并取得了一些进展,但最终的解决方案尚未找到。
DB情况:
表格"clients_ a":
userid | name
1 | Steve
2 | John
3 | Paul
表格"clients_ b":
userid | name
1 | NULL
3 | Jokename
4 | Jessy
所需结果/输出:
userid | name
1 | Steve
2 | John
3 | Paul
4 | Jessy
正在进行的描述:
userid
在结果中是唯一的(合并)- 对于不为NULL的CCD_ 2的结果是有利的
- 如果有两个条目,则表
clients_a
中的结果是有利的 - 所有条目都有一个groupid(见下文),必须将其考虑在内
我尝试过的MySql查询(结果很接近):
尝试1:此查询有效,但不考虑名称。它采用client_a
:中的所有名称
SELECT * FROM
(
SELECT userid, name
FROM `client_a`
WHERE groupid = 123
UNION DISTINCT
SELECT userid, name
FROM `client_b`
WHERE groupid = 123
) AS res
GROUP BY res.userid
尝试2:此查询会创建重复的条目(一个用户ID可能出现两次),但会考虑名称,如图所示:
SELECT o.*, i.* FROM
(
SELECT userid, name
FROM `client_a`
WHERE groupid = 123
UNION DISTINCT
SELECT userid, realname
FROM `client_b`
WHERE groupid = 123
GROUP BY userid
) AS o
LEFT JOIN `client_a` as i on i.userid = o.userid
我也尝试过使用MIN(name)
,但没有成功。
感谢您的帮助。
您可以使用NOT EXISTS
:
SELECT a.userid, a.name
FROM clients_a a
WHERE a.groupid = 123
AND (name IS NOT NULL OR NOT EXISTS (SELECT 1 FROM clients_b b WHERE b.userid = a.userid))
UNION
SELECT b.userid, b.name
FROM clients_b b
WHERE b.groupid = 123
AND NOT EXISTS (SELECT 1 FROM clients_a a WHERE a.userid = b.userid AND a.name IS NOT NULL)
请参阅演示
结果:
userid | 名称 |
---|---|
1 | Steve |
2 | John |
3 | Paul |
4 | 杰西 |