gpt4 book ai didi

sql - MYSQL REGEXP/RLIKE 有什么建议吗?

转载 作者:行者123 更新时间:2023-11-29 09:17:28 27 4
gpt4 key购买 nike

我有一个名为“奖学金”的表,其中有一个名为“专业”的字段,其中包含与奖学金相关的专业的逗号分隔专业名称。

假设该字段可能包含以下一项(或多项以逗号分隔):商业、农业综合企业、工商管理、国际业务。

如果有人搜索“商科”作为专业,我如何选择“商科”作为匹配项而不选择其他专业?

我最接近的是这个,但我知道它可以更好 - 我的正则表达式能力不是那么强。

SELECT scholarship_id, scholarship_award_name, scholarship_majors 
FROM scholarships
WHERE scholarship_majors rlike '[, ][[:<:]]business[[:>:]][, ]'
OR scholarship_majors rlike '^[[:<:]]business[[:>:]][, ]'
OR scholarship_majors rlike '[, ][[:<:]]business[[:>:]]$'

我正在 try catch 以“业务”或“业务”或“业务”、“业务”开头但不是“业务管理”等开头的字段...

有什么建议吗?

最佳答案

有什么建议吗?

不要将数据存储在逗号分隔的列表中 - 这是非规范化的数据,除了难以隔离细节之外,还容易出现错误数据(拼写错误、区分大小写......)。

  1. 定义一个MAJORS表:

    • MAJOR_ID(主键)
    • MAJOR_NAME
  2. 使用多对多表将奖学金加入一个或多个专业:

    SCHOLARSHIP_MAJORS

    • SCHOLARSHIP_ID(SCHOLARSHIPS 表的主键、外键)
    • MAJOR_ID(MAJORS 表的主键、外键)
  3. 使用 JOIN 获得基于专业的奖学金:

    SELECT s.scholarship_id, 
    s.scholarship_award_name,
    m.major_name
    FROM SCHOLARSHIPS s
    JOIN SCHOLARSHIP_MAJORS sm ON sm.scholarship_id = s.scholarship_id
    JOIN MAJORS m ON m.major_id = sm.major_id
    WHERE m.major_name IN ('a', 'b', 'c')

...如果您希望专业输出以逗号分隔的列表,请使用 GROUP_CONCAT 函数:

    SELECT s.scholarship_id, 
s.scholarship_award_name,
GROUP_CONCAT(m.major_name) AS majors
FROM SCHOLARSHIPS s
JOIN SCHOLARSHIP_MAJORS sm ON sm.scholarship_id = s.scholarship_id
JOIN MAJORS m ON m.major_id = sm.major_id
WHERE m.major_name IN ('a', 'b', 'c')
GROUP BY s.scholarship_id, s.scholarship_award_name

关于sql - MYSQL REGEXP/RLIKE 有什么建议吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3638871/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com