我在尝试使用 MySQL 查询避免部分重复结果时遇到问题。我承认我是 MySQL 的新手,但我从对 SO 的研究中了解到,我将在下面为您布置的架构肯定可以做得更好(users 表的linked_users 列应该是一个单独的表)。但是,我现在无法更改它的设置方式。
我正在尝试返回分配给 t2 中每个项目的用户 ID 的用户名或链接到这些用户的用户的用户名。但是,该查询为每个项目返回两组名称。我认为这种情况正在发生,因为它正在搜索它们两次,并且我试图阅读关于从多个表返回多个值的本教程,但我似乎无法围绕 JOINS 和 UNIONS 等等。
我的问题有两个:
- 在不改变数据库设置方式的情况下,我能做些什么来解决这个问题?
- 将来应该如何更改数据库以更好地允许这样的查询?
感谢您的时间。
架构:
create table users (user_id int, user_name varchar (55), linked_users varchar (55));
insert into users( user_id, user_name, linked_users)values(1, 'user1', '2,154,4,45');
insert into users( user_id, user_name, linked_users)values(2, 'user2', '13,1,200');
create table t2 (t2_id int, user_id int);
insert into t2( t2_id, user_id)values(1, 2);
insert into t2( t2_id, user_id)values(2, 1);
insert into t2( t2_id, user_id)values(3, 1);
insert into t2( t2_id, user_id)values(4, 2);
insert into t2( t2_id, user_id)values(5, 3);
询问:
SELECT t.*, u.user_name
FROM t2 t, users u
WHERE t.user_id = u.user_id
OR find_in_set(t.user_id, u.linked_users) > 0