我有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))
它不起作用。有什么建议吗?
答案 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
这是第二版查询的演示: