我有两个表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)
答案 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)
只需使用映射表中的一列。