2016-11-25 2 views
1

私は2つのテーブルTableAとTableBを持っています。TableA idを取得するテーブルのIDは、文字列を持つTableAの列に等しい

テーブルA:

id | users  | 
------------------- 
1 | ["2","5","4"]| 
2 | NULL   | 
3 | ["5"]  | 

TableBの

id | Name | 
----------- 
2 | Jane | 
3 | Joe | 
4 | John | 
5 | Jack | 

どのように私は、TableBのIDはテーブルAのユーザーであるTableAのIDを表示する結果を得ることができますか?

  • だから、ジェーン= 1
  • ジョー= Nullが
  • ジョン= 1
  • とジャック= 1,3のため
+0

あなたの 'users'カラムに実際に' ["2"、 "5"、 "4"] 'という文字列がありますか? –

+0

JSON_ENCODEの結果がわかりません –

+1

もし私がそこに行っていたら、ここからは始まりません:-(json_encodeはこれを不必要に複雑にします – Strawberry

答えて

0

はこのような何かが動作するはずのために:

SELECT b.id, 
     b.Name, 
     COALESCE(a.id, 'NA') AS a_id 
FROM TableB b 
LEFT JOIN TableA a 
    ON FIND_IN_SET(b.id, REPLACE(REPLACE(REPLACE(a.users, '[', ''), ']', ''), '"', '')) > 0 

デモ:

SQLFiddle

+0

"in on節を修正しようとすると曖昧です"エラー –

+0

動作しているフィドルを確認してください –

+0

ありがとう、あなたは天才です! –

0

は、私は整数の表(I)(0-9)を持っている(私も)...私は真剣に解決策としてこれを提唱していないんだけど、楽しみのためだけに

。 ..

DROP TABLE IF EXISTS table_a; 
DROP TABLE IF EXISTS table_b; 

CREATE TABLE table_a 
(id INT NOT NULL AUTO_INCREMENT PRIMARY KEY 
,users VARCHAR(100) NULL 
); 

INSERT INTO table_a VALUES 
(1,'["2","5","4"]'), 
(2,NULL), 
(3,'["5"]'); 

CREATE TABLE table_b 
(id INT NOT NULL AUTO_INCREMENT PRIMARY KEY 
,name VARCHAR(12) NOT NULL 
); 

INSERT INTO table_b VALUES 
(2,'Jane'), 
(3,'Joe'), 
(4,'John'), 
(5,'Jack'); 

SELECT b.name 
    , GROUP_CONCAT(a.id ORDER BY a.id+0) ids 
    FROM table_b b 
    LEFT 
    JOIN 
    (SELECT DISTINCT a.id, SUBSTRING_INDEX(SUBSTRING_INDEX(
         REPLACE(
         REPLACE(
          REPLACE(a.users,'"','') 
          ,'[','') 
          ,']','')      
         ,',',i.i+1) 
         ,',',-1) 
         x 
        FROM 
       table_a a,ints i 
    ) a 
    ON a.x = b.id 
    GROUP 
    BY name; 

+------+------+ 
| name | ids | 
+------+------+ 
| Jack | 1,3 | 
| Jane | 1 | 
| Joe | NULL | 
| John | 1 | 
+------+------+ 
関連する問題