2

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

4

3 回答 3

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

于 2009-02-09T20:21:05.957 回答
0

Just use one of the columns from the mapping table.

于 2009-02-10T01:22:18.463 回答
0
SELECT 
     tbl1.*, tbl2.*
FROM tbl1, tbl2, tbl3
 WHERE
     tbl1.id = tbl2.id
 AND tbl1.product = tbl3.product1
 AND tbl2.product = tbl3.product2
于 2009-02-09T20:20:27.597 回答