我已经尝试了3天来解决这个问题-现在我需要你们:-)
我需要加入3个表:
table data table user table collection data_id | colors user_id | user_name collection_id | user_id | data_id ---------------- ------------------- --------------------------------- 1 | blue 1 | Brian 1 | 1 | 1 2 | red 2 | Jason 2 | 2 | 3 3 | green 3 | Marie 3 | 1 | 3 4 | yellow 4 | 3 | 2
输出是特定于用户的。这意味着Brian不想看到蓝色和绿色,Jason不想看到绿色,Marie不想看到红色。那应该给出以下输出:
for Brian for Jason for Marie id | colors id | colors id | colors ----------- ----------- ----------- 2 | red 1 | blue 1 | blue 4 | yellow 2 | red 3 | green 4 | yellow 4 | yellow
这是我目前最好的解决方法:
SELECT * FROM data d INNER JOIN user u ON u.user_id = d.user_id LEFT JOIN collection c ON c.data_id = d.data_id WHERE c.user_id <> '1' OR c.collection_id IS NULL
结果是Brian的选择将得到整理-很好!但是由于Jason不想看到绿色,所以仍然为Brian选中了它。相当混乱!
我希望我可以或多或少地理解它=)
非常感谢所有帮助和提示!
可能正在使用交叉联接,而不是在table_collection中
select user.id, user.name, data.data_id, data.data from user cross join data where ( user.user_id, data.data_id) not in ( select user_id, data_id from table_collection )