【问题标题】:SQL doing data comparisons for table joinsSQL 对表连接进行数据比较
【发布时间】:2014-02-22 06:28:23
【问题描述】:

我正在开发一个使用数据库的 C# 应用程序。我需要将两个表连接在一起,但它们的链接很奇怪。一个表有字母标识数据,如 A、B、C 等,另一个有字符串值标识类型,如“小”或“大”

我需要连接这些表,以便第一个表列中代码为“a”的值链接到另一个表列中值为“small”的列以及值为“b”或“d”的链接到另一个表的“大”值

使用标准 SQL 执行此操作的最佳方法是什么。有什么方法可以在 join 语句中添加额外的条件,或者最好在 where 子句中执行类似的操作?

谢谢,

-杰克

【问题讨论】:

  • 我认为,如果你在 C# 代码中做这些事情会更好!

标签: c# sql database join


【解决方案1】:

处理此问题的最简单方法是使用一个映射值的中间表。然后,您可以将此表添加到您的语句中,并使用它将主表连接在一起。

【讨论】:

    【解决方案2】:

    在您的第一个表中创建一个案例语句,将 a 映射到“小”,将 b、c、d... 映射到“大”,并将新字段加入表

    【讨论】:

      【解决方案3】:

      制作中间表或查询。

      SELECT *
      FROM (
        SELECT CASE col WHEN 'A' THEN 'small'
                        WHEN 'B' THEN 'large'
                        WHEN 'D' THEN 'large'
                        ELSE NULL
               END AS col
         FROM one
      ) x
      JOIN two t
          ON x.col = t.col
      

      http://sqlfiddle.com/#!6/45eb0/1

      【讨论】:

        【解决方案4】:

        根据您的描述,我认为您可以使用 Common table expression 来选择您需要的那些值,以及具有 A、B、C 值的列。然后使用 CTE 加入您的第二张桌子。它将如下所示。

        ;WITH A_CTE(列)
        作为
        (
        选择 column1,columnb, CASE A_B_C_COLUMN WHEN 'A' THEN 'LARGE' WHEN 'B' THEN 'SMALL' WHEN 'C' THEN 'TINY' END AS ColumnC
        )
        select * from A_CTE JOIN TABLEB ON A_CTE.ColumnC = TABLEB.ConditionColumn

        如果您能提供更多细节,很高兴为您编写 SQL 语句。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-11-24
          • 1970-01-01
          • 2018-08-21
          • 1970-01-01
          • 1970-01-01
          • 2015-02-13
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多