【问题标题】:match one column of one table to data of other table将一张表的一列与另一张表的数据匹配
【发布时间】:2012-01-23 16:17:12
【问题描述】:

我有 2 张桌子 - 桌子 1 和桌子 2。 table1 如下:

ID
A01
A02
A03
A04
A05

table2 如下:

DeptID  Name        ID
5       groupA      A01
5       groupA      A03
5       groupA      A04
5       groupB      A02
5       groupB      A04
5       groupB      A05

表3:

Codename    DisplayName
groupA      Humti
groupB      Dumpti

我想输出为:

DeptID  Name         ID    Result
5       Humpti       A01   1
5       Humpti       A02   0
5       Humpti       A03   1
5       Humpti       A04   1
5       Humpti       A05   0
5       Dumpti       A01   0
5       Dumpti       A02   1
5       Dumpti       A03   0
5       Dumpti       A04   1
5       Dumpti       A05   1

在这里,groupA 附加了 3 个 ID。 A01、A03、A04。所以对于这些,输出中的 Result Column 的值为 1。但是对于 A02,A05 groupA 没有关联,因此 Result 列的值为 0。我们需要记住的是 groupA 将与 table1 的所有 ID 进行比较。

编辑:所有解决方案的效果都很好,但是我可以根据表 3 中的值将“groupA”替换为“Humpti”,将“groupB”替换为“Dumpti”吗? p>

谢谢..

【问题讨论】:

  • 如何将具有GroupA, GroupB 值的name 列与具有A01,A02 值的ID 列相匹配

标签: sql-server database sql-server-2008 join


【解决方案1】:
SELECT t2.deptId, t2.name, table1.id, CASE WHEN table2.id IS NULL THEN 0 ELSE 1 END result
FROM table1, (SELECT distinct deptId, group from table2) t2
LEFT OUTER JOIN table2 ON t2.name = table2.name AND t2.ID = table1.ID

编辑,针对您更改的问题:

SELECT t2.deptId, table3.name, table1.id, CASE WHEN table2.id IS NULL THEN 0 ELSE 1 END result
FROM table1, table3, (SELECT distinct deptId, name from table2) t2
LEFT OUTER JOIN table2 ON t2.name = table2.name AND t2.ID = table1.ID
WHERE table3.codename = t2.name

【讨论】:

    【解决方案2】:

    此查询将返回您想要的数据集。虽然要求有点奇怪,所以当你扩展做其他事情时它可能不起作用:

    select 
        sub.*,
        result = case when t.ID is null then 0 else 1 end
    from 
        (
        select distinct
            t2.DeptID,
            t2.Name,
            t1.ID
        from
            table1 t1,
            table2 t2
    ) sub
    left join table2 t on sub.ID = t.ID and sub.name = t.name
    

    【讨论】:

      【解决方案3】:
      SELECT ddn.DeptID
           , ddn.Name
           , did.ID
           , CASE WHEN t2.id IS NOT NULL 
                    THEN 1 
                    ELSE 0 
             END AS Result
      FROM 
           table1 AS did
        CROSS JOIN
          ( SELECT DISTINCT 
                DeptID
              , Name
            FROM table2
          ) AS ddn
        LEFT JOIN table2 AS t2 
          ON  t2.ID = did.ID
          AND t2.DeptID = ddn.DeptID
          AND t2.Name = ddn.Name
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-12-02
        • 1970-01-01
        • 2023-03-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多