【问题标题】:Query related data based on "like" statement根据“like”语句查询相关数据
【发布时间】:2009-07-15 19:59:26
【问题描述】:

我有两张桌子

表 1: A列(varchar)

表2: B 列(varchar)

我需要从 T2 中获取所有行,其中 ColumnB 与“ColumnA%”中的任何行“相似”。例如,T1 中的行可能是:

  • 夏天09
  • Fall09

而 T2 中的行可能是

  • Spring09 Com101 Sec1
  • Summer09 Stat400 Sec2
  • Fall09 CS200 Sec3

在这种情况下,它将重新调整 Stat400 和 CS200 行。有没有办法在一条 SQL 语句中做到这一点?

【问题讨论】:

    标签: sql join where-clause like-keyword


    【解决方案1】:
    
    SELECT T2.*
    FROM T1, T2
    WHERE T1.ColumnB LIKE T2.ColumnA + '%'
    

    
    SELECT T2.*
    FROM T1
    INNER JOIN T2 ON T1.ColumnB LIKE T2.ColumnA + '%'
    

    可能不会跑得很快。

    【讨论】:

    • 您可能还想用空格填充以说明一个 ColumnA 值包含另一个 ColumnA 值。例如,如果有 Fall09 和 Fall091,那么 Fall09 将链接到表 2 中的两个集合。在这种情况下可能不是问题,因为数字是零填充的,但我以前见过这个问题。
    【解决方案2】:

    这个问题指向了一个糟糕的表格设计。我的好朋友 Codd 总是说:不要将多条信息合并到一个列中!

    t1 coulm 应该被拆分,因此学期和/或年份应该是他们自己的列,并带有一个 FK 到 t2 表,可以使用索引找到班级信息,而不是慢 LIKE!!

    【讨论】:

    • 我完全同意。不幸的是,这是我们正在向其添加功能的第 3 方应用程序。所以重新设计数据库并不是一个真正的选择
    猜你喜欢
    • 1970-01-01
    • 2023-03-28
    • 2018-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-02
    • 1970-01-01
    • 2020-04-18
    相关资源
    最近更新 更多