当列无法正确匹配时,SQL查询如何从多个表中返回数据

时间:2015-12-06 18:06:20

标签: sql multiple-columns multiple-tables

我试图找到相关信息,但似乎我无法自己解决这个问题,所以我需要帮助:)

例如,表1:

public static int[] sbSample(int a[],int i){

    int size=0;
    int b[]=new int[a.length];
    for(int k=0;k<a.length;k++){
        if(!(a[k]==i)){

            b[size]=a[k];
            size++;
        }
    }
    for(int k=0;k<size;k++){
        System.out.println(b[k]);
    }
    return b;
}

表2:

+-------+-------------+------+-----------+----------+
| ID    | SNA_Name    | Desc | Time      | Task_ID  |
+-------+-------------+------+-----------+----------+
| 741   | Temp        | NNE  | 2015-01-. | 1661     |
+-------+-------------+------+-----------+----------+

表3:

+-------+-------------+
| ID    | Name        |
+-------+-------------+
| 741   | GRFDSD14    |
+-------+-------------+

我想在最后得到这样的东西:

+-------+-------------+------+-----------+-------------------------+
| xx    | USER        | xx   | xx        | Data                    |
+-------+-------------+------+-----------+-------------------------+
| xx    | Mylsef      | xx   | xx        | xxx.dd.1661 azerty      |
+-------+-------------+------+-----------+-------------------------+

到目前为止,我已尝试使用相同的ID 741

来匹配表1和表2
(----------TABLE 1----------------------)(--Table 2---)(---TABLE 3---) 
+-------+-------------+------+-----------+-------------+-------------+
| ID    | SNA_Name    | Desc | Time      | Name        | USER        |
+-------+-------------+------+-----------+-------------+-------------+
| 741   | Temp        | NNE  |  2015-01-.| GRFDSD14    | Mylsef      |
+-------+-------------+------+-----------+-------------+-------------+

结果:

SELECT a.ID, a.SNA_Name, a.Desc, a.Time, b.Name
FROM Table1 a
INNER JOIN Table2 b
on a.ID = b.ID

但要加入第三个表我需要匹配Task_ID信息:1661 在第三个表格中,我的ID是按数字投降的,因此我无法使用符号= 我想在与Data_ID

匹配的同一行中打印Column USER

非常感谢。

[编辑 - &gt;使用SQL 2008

2 个答案:

答案 0 :(得分:0)

尝试连接:

FROM Table1 
JOIN Table3 ON Table3.Data LIKE '%'+ CAST(Table1.Task_ID AS varchar(20)) + '%'

答案 1 :(得分:0)

您没有提及您正在使用的数据库,因此我无法提供具体信息,但我会尝试使用能够比较任何情况的正则表达式创建计算列描述,thosae是...

有时这个数字在它之前有一段时间,有时它在它之前有一个空格,有时候它之前有一个撇号。

在下面的示例中,正则表达式将检查id与其前面的任何上述字符的任何组合,并且还可以防止与部分值不匹配 - 即它与56和4564不匹配。

SELECT
    *
FROM
   t1
LEFT JOIN 
    t2
ON 
    concat(t2.data, ' ') REGEXP concat('[\'. ]', t1.i2, ' ')

关于上述内容的一些注意事项 - 我在数据列上添加一个空格,以便始终保证数字后面跟一个空格,或者后面跟着其他一些文本(比如你的#34; azerty&# 34)。我在id的末尾加上一个空格,这样就可以防止相同id嵌入另一个值的匹配。

我希望这对某人有帮助。