【问题标题】:"Distinct" results from SQL query using a mappings table使用映射表的 SQL 查询的“不同”结果
【发布时间】:2010-10-06 11:53:30
【问题描述】:

我有两个表 tbl1 和 tbl2,都有两列,一列用于 id,一列用于产品。我想提取两者中的行,即 tbl1.id = tbl2.id 和 tbl1.product = tbl2.product 的行,并将 tbl1 和 tbl2 中的行合并为一行。

我想这是这样的:

SELECT tbl1.\*, tbl2.\*
FROM tbl1, tbl2
WHERE tbl1.id = tbl2.id
  AND tbl1.product = tbl2.product

或

SELECT tbl1.\*, tbl2.\*
FROM tbl1
  INNER JOIN tbl2 
    ON tbl1.id = tbl2.id
       AND tbl1.product = tbl2.product

?

我还有一个问题,即两个电子表格中的产品名称不同。

我添加了一个映射表,其中包含 tbl1 中的产品名称以及每行中对应的 tbl2 产品名称。

我怎么知道用这个添加的表实现上述 SQL 查询的等效项 (其中存在于两者中的每个 id/product 组合只输出一行)?

感谢您的帮助。

(注意:我使用的是 MS Access)

【问题讨论】:

    标签: sql ms-access join mapping distinct


    【解决方案1】:
    SELECT
         t1.id,
         t1.product,
         t2.product
    FROM
         tbl1 t1
    LEFT OUTER JOIN mapping_table map ON
         map.id = tbl1.id
    INNER JOIN tbl2 t2 ON
         t2.id = t1.id AND
         (t2.product = t1.product OR t2.product = map.tbl2_product)
    

    如果 t1 和 t2 中的产品名称相同,您可能需要根据您是否希望将行视为匹配项进行调整,但映射表中也存在匹配项。此外,如果您打算将所有产品都包含在映射表中,即使名称已经在两者之间匹配。

    【讨论】:

      【解决方案2】:
      SELECT 
           tbl1.*, tbl2.*
      FROM tbl1, tbl2, tbl3
       WHERE
           tbl1.id = tbl2.id
       AND tbl1.product = tbl3.product1
       AND tbl2.product = tbl3.product2
      

      【讨论】:

        【解决方案3】:

        只需使用映射表中的一列。

        【讨论】:

          猜你喜欢
          • 2013-01-14
          • 1970-01-01
          • 1970-01-01
          • 2012-08-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-05-13
          • 2013-09-07
          相关资源
          最近更新 更多