Get TableA id其中TableB id等于TableA列,它有一个字符串

问题描述:

我有两个表TableA和TableB。Get TableA id其中TableB id等于TableA列,它有一个字符串

表A:

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

表B

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

我怎样才能得到一个结果,以显示表A id其中表B的ID是在表A的用户?

  • 因此,对于简= 1
  • 乔= NULL
  • 约翰= 1
  • 和杰克= 1,3
+0

您的'用户'列是否真的包含字符串'[“2”,“5”,“4”]? –

+0

不知道该怎么称呼它,但JSON_ENCODE的结果 –

+1

如果我去那里,我不会从这里开始:-(。json_encode使这个不必要的复杂 – Strawberry

像这样的东西应该工作:

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 clause是不明确的”错误 –

+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 | 
+------+------+