我已经尝试了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
输出是用户特定的。这意味着布莱恩不想看到蓝色和绿色,杰森不想看到绿色和玛丽不想看到红色。 这应该给出以下输出:
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的选择将被整理出来 - 这很好!但是因为杰森不想看到绿色,所以它仍然被布莱恩选中。 很混乱!
我希望我能写得或多或少可以理解=)
非常感谢所有帮助和提示!
欢呼声
编辑:此解决方案已延长并缩短了此解决方案:replace the id with the username from an other table in a CROSS JOIN in MySQL
答案 0 :(得分:3)
可以使用交叉联接而不是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
)
答案 1 :(得分:2)
我不确定我是否理解你想要的东西,但你可以试试这个:
SELECT *
FROM data d
INNER JOIN user u ON 1=1
WHERE (u.id, d.id) NOT IN (SELECT user_id, data_id FROM collection)