我有一份工作'像这样的表:
'image/encoded': dataset_util.bytes_feature(encoded_jpg)
技能' column包含一个JSON数组。
我需要选择能够满足一项或多项技能的工作 - 这样的事情(但显然不会起作用):
----------------------------------------------
|job_id |name |skills |
----------------------------------------------
|1 |Job 1 |[1] |
|2 |Job 2 |[2,3] |
|3 |Job 3 |[4,5,6] |
----------------------------------------------
应该返回:
SELECT * FROM jobs WHERE skills IN (1,4)
答案 0 :(得分:1)
您可以使用 REGEXP
select * from jobs where skills REGEXP '[[:<:]]1[[:>:]]|[[:<:]]4[[:>:]]'
追加[[:<:]]
之前和[[:>:]]
之后,以匹配确切的值和|
以匹配多个值。
<强> >>>Demo<<< 强>
答案 1 :(得分:0)
这些查询中的任何一个都会返回您的预期输出。
选项1
如果skills
是一个字符串(varchar,text),您可以使用LIKE
字符串比较函数。
SELECT * FROM jobs WHERE skills LIKE "%1%" OR skills LIKE "%4%";
选项2
或者,如果您更喜欢正则表达式,则可以使用REGEXP
函数。
SELECT * FROM jobs WHERE skills REGEXP "1|4";
答案 2 :(得分:0)
在数据库中存储JSON适用于您不需要报告或查询所述字段的情况,因为它效率较低,并且没有充分利用多年的查询性能优化由数据库供应商。 我建议使用2个表,一个用于工作,另一个用于技能,并在技能表上有一个名为job_id的字段,因此您可以简单地执行如下查询:
从job.id所在的职位中选择职位。*(选择技能中的job_id,其中,技能为(1,4))
技能表可以稍后扩展为拥有更多字段或者可能与其他技能相关联。
希望有所帮助!