使用映射表的SQL查询产生“Distinct”

时间:2009-02-09 20:16:11

标签: sql ms-access join mapping distinct

我有两个表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)

3 个答案:

答案 0 :(得分:3)

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的产品名称相同,但是在地图表中也存在匹配项,则可能需要根据是否要将行视为匹配来调整此值。此外,如果您计划在映射表中包含所有产品,即使两者之间的名称已经匹配。

答案 1 :(得分:0)

SELECT 
     tbl1.*, tbl2.*
FROM tbl1, tbl2, tbl3
 WHERE
     tbl1.id = tbl2.id
 AND tbl1.product = tbl3.product1
 AND tbl2.product = tbl3.product2

答案 2 :(得分:0)

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