我想扩展以下查询:
SELECT d.dataid, d.colors, u.userid, u.username FROM users u CROSS JOIN datas d WHERE (u.userid , d.dataid) NOT IN (SELECT c.userid, c.dataid FROM collections c) AND u.userid = 1
对于这个数据样本:
table datas table users table collections dataid | colors | addedby userid | username collectionid | userid | dataid -------------------------- ------------------- ------------------------------ 1 | blue | 1 1 | Brian 1 | 1 | 1 2 | red | 1 2 | Jason 2 | 2 | 3 3 | green | 2 3 | Marie 3 | 1 | 3 4 | yellow | 3 4 | 3 | 2
这些结果是预期的:
for Brian dataid | colors | userid | username ----------------------------------- 2 | red | 1 | Brian 4 | yellow | 1 | Marie for Jason dataid | colors | userid | username ----------------------------------- 1 | blue | 2 | Brian 2 | red | 2 | Brian 4 | yellow | 2 | Marie
添加了从用户继承用户 ID 的行“ addedby”。目前,我的查询用用户名替换了来自用户的用户 ID,而不是来自数据的 addedby。我真的需要替换数据中的用户 ID,而不是用户的用户 ID。:-)
有谁知道如何解决这个问题?
提前致谢!
只需使用数据表再次加入用户表。并在输出中使用此连接中的用户名。
SELECT d.dataid, d.colors, uo.userid, uo.username FROM users u CROSS JOIN datas d INNER JOIN users uo ON d.added_by = uo.id WHERE (u.userid , d.dataid) NOT IN (SELECT c.userid, c.dataid FROM collections c) AND u.userid = 1
而且我相信,你甚至可以这样写你的查询
SELECT u.userid, u.username, d.dataid, d.colors FROM username u INNER JOIN datas d ON u.userid = d.addedby WHERE d.dataid NOT IN ( SELECT dataid FROM collections WHERE userid = 1 )