5

2つのテーブルを結合したいと思います。1つのテーブルには電子メールフィールドがあり、もう1つのテーブルにはコンマ区切りの電子メールリストがあります。

これがシナリオです:

テーブル

Team
--------------
- team_id
- email_list (this is a comma separated email address)


Persons
--------------
 - person_id
 - email

私はこのようなことを試みました:


SELECT team.* FROM team INNER JOIN persons ON trim(persons.email) IN (CONCAT('\'',REPLACE(REPLACE(team.email_list,' ',''),',','\',\''),'\''))

しかし、IN句内の文字列は、「'email1'、'email2'、'email3'」のように見えます。

それを機能させるためのアイデアはありますか?

4

2 に答える 2

8

MySQLには、コンマ区切りのリストを支援する組み込み関数があります。

SELECT  . . .
FROM team t INNER JOIN persons p 
  ON FIND_IN_SET(p.email, t.email_list);

ただし、インデックスを使用するように最適化できないため、パフォーマンスに満足することはできません。

データベース列にコンマ区切りのリストを格納することは本当に悪いですか?に対する私の答えも参照してください。

于 2012-12-10T03:17:03.697 に答える
0

私はこれをMSSQLに使用しましたが、個人的には好きではありませんが、その1つのレポートまたはデータタスクではうまくいきます。

declare @team table (team_id int,email_list varchar(8000));
declare @persons table (person_id int,email varchar(64));

insert into @team
SELECT 1,'bob@domain.com,jane@domain.com' union all
SELECT 2,'ben@domain.com,jane@domain.com' union all
SELECT 3,'ben@domain.com,james@domain.com' union all
SELECT 4,'bill@domain.com,alice@domain.com,peter@domain.com' UNION ALL
SELECT 3,'alben@domain.com,james@domain.com' 
;


insert into @persons
select 1,'james@domain.com' union all
select 2,'ben@domain.com' union all
select 3,'alice@domain.com';

select 
  Team.team_id,
  Team.email_list,
  Person.person_id, 
  Person.email 'matched_on'
from
  @team Team
  INNER JOIN @persons Person on ','+Team.email_list+',' LIKE '%,'+Person.email+',%';

デビッドの調査結果に従って更新

于 2012-12-10T03:29:46.943 に答える