2

同じテーブルを持つ8つのデータベースがあります

db0
  tbluser |  id  |    name

db1
  tbluser |  id  |    name

db2
  tbluser

db3
   tbluser |  id  |    name

db4
   tbluser |  id  |    name

db5       
   tbluser |  id  |    name

db6       
   tbluser |  id  |    name

db7
   tbluser |  id  |    name

another table dbcommonユーザーメッセージが保存された場所があります

dbcommon
   message  |  id  |  sender_id  |  recipient_id

私の問題は、送信者 ID と受信者 ID に基づいて、ユーザー名を含むすべてのメッセージを照会する必要があることです。

mysqlでこれを行う最良の方法は何ですか?

私のアプローチは、ユニオンを使用してすべてのdb1からdb7のユーザーデータを結合し、dbcommonのメッセージに内部結合することですが、それが問題ないかどうかはわかりません。ユーザーテーブルの選択に何百万ものデータがあり、ユニオンが問題になる場合.

私の質問をよりよく理解するために。作ったけど使わない。

select *, sender.nickname as sender_name, recipient.nickname as recipient_name
from dbcommon.message m
inner join
(
select * from db0.tbluser
union
select * from db1.tbluser
union
select * from db2.tbluser
union
select * from db3.tbluser
union
select * from db4.tbluser
union
select * from db5.tbluser
union
select * from db6.tbluser
union
select * from db7.tbluser
) as sender on m.sender_id = sender.id
inner join
(
select * from db0.tbluser
union
select * from db1.tbluser
union
select * from db2.tbluser
union
select * from db3.tbluser
union
select * from db4.tbluser
union
select * from db5.tbluser
union
select * from db6.tbluser
union
select * from db7.tbluser
) as recipient on m.recipient_id = recipient.id
4

3 に答える 3

1

次のように使用できます: (ただし、これは同じデータベースに対して複数のデータベースを用意することはお勧めできません。

select d1.* from db1.dbcommon d1 inner join db2.tbluser d2 on d1.sender_id = d2.id 
UNION
select d1.* from db1.dbcommon d1 inner join db2.tbluser d2 on d1.sender_id = d2.id
于 2013-06-11T07:47:42.100 に答える