如何编写SQL以获取另一列中的数据

时间:2019-04-18 06:52:21

标签: mysql sql

我有2个表tblA和tblB。现在,我想通过op_code来获取名称。

tblA
op_code    |     date    |    num
------------------------------------------------
 a         |      03/01  |    34
 b         |      04/03  |    5556
 c         |      03/05  |    555

tblB
id    |     op_code    |    Name
------------------------------------------------
 1    |       a        |    Jet
 2    |       b,c      |    Mike
 3    |       d        |    Tom

由于tblB中的op_code数据是组合数据,因此我尝试如下编写sql。

   select a.*, b.* 
     from tblA a 
LEFT JOIN tblB b on a.op_code in (SUBSTRING_INDEX(b.op_code, ',', 13))

它不起作用。有什么建议吗?

1 个答案:

答案 0 :(得分:0)

您可以在此处使用const response = [ { "id": 364, "siteName": "FX21 - PortA", }, { "id": 364, "siteName": "FX21 - PortB", }, { "id": 370, "siteName": "FX05 - ER", } ] function getSiteNameById(idFilter){ return response.reduce((acc, ele) => { return ele.id === idFilter ? acc.concat(ele.siteName) : acc; }, []); } console.log(getSiteNameById(364));

FIND_IN_SET()

但是,由于将CSV数据存储在SQL表中被视为不良做法,因为它是非规范化数据,因此您仅应将其视为临时的变通方法查询。更好的计划是承诺对B表中的每个SELECT a.*, b.* FROM tblA a LEFT JOIN tblB b ON FIND_IN_SET(a.op_code, b.op_code) > 0; 关系仅保留一个记录。

很有趣,这是使用op_code编写查询的另一种方式:

REGEXP

enter image description here

这是第二版查询的演示:

Demo