MySQL クエリで部分的に重複する結果を回避しようとして問題が発生しています。私はMySQLに本当に慣れていないことを認めますが、SOに関する調査から、以下でレイアウトしようとしているスキーマは間違いなくより良い方法で実行できることを学びました(usersテーブルのlinked_users列は別のテーブルにする必要があります) )。ただし、今の設定方法を変更することはできません。
t2 の各アイテムに割り当てられたユーザー ID のユーザー名、またはそれらのユーザーにリンクされているユーザーのユーザー名を返そうとしています。ただし、クエリはアイテムごとに 2 セットの名前を返します。複数のテーブルから複数の値を返すことに関して SO に関するこのチュートリアルを読み込もうとしましたが、JOINS や UNIONS などについて頭を悩ませているようには見えません。
私の質問は 2 つあります。
- データベースのセットアップ方法を変更せずにこの問題を解決するにはどうすればよいですか?
- 今後、このようなクエリをより適切に実行できるようにするには、データベースをどのように変更する必要がありますか?
お時間をいただきありがとうございます。
スキーマ:
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