我有这样的场景,我只需要在两个不同的表中的两列完全匹配时才需要检索记录
Table A
--------
Column1 Column2
Item1 Code1
Item1 Code2
Item1 Code3
Item1 Code4
Table B
-------
Column1 Column2 Column3
Item2 Code1 10
Item2 Code2 10
Item2 Code3 10
Item2 Code4 10
Item3 Code1 10
Item3 Code2 10
Item3 Code3 10
现在,只有当两个表中Column2中的所有值匹配时,才需要从表B中获取第3列。应忽略第3项,因为并非表B中column2的所有值都与表A第2列
相匹配我期待的结果
Column1 Column2 Column3
Item1 Code1 10
Item1 Code2 10
Item1 Code3 10
Item1 Code4 10
建议请参阅此SQL。
答案 0 :(得分:1)
尝试使用子查询进行内部联接.. having子句是关键,以确保它匹配所有4个条件。
SELECT a.*, b.column3
FROM tablea a
JOIN tableb b on b.column2 = a.column2
WHERE b.column1 IN
( SELECT b.column1
FROM tableB b
WHERE b.column2 in(select column2 from tablea)
GROUP BY b.column1
HAVING COUNT(*) = 4
);
Column1 Column2 Column3
Item1 Code1 10
Item1 Code2 10
Item1 Code3 10
Item1 Code4 10
如果您实际上并不知道特定商品的代码数量,您也可以将其设为动态。
SELECT a.*, b.column3
FROM tablea a
JOIN tableb b on b.column2 = a.column2
WHERE b.column1 IN
( SELECT b.column1
FROM tableB b
WHERE b.column2 in(select column2 from tablea)
GROUP BY b.column1
HAVING COUNT(*) = (SELECT count(*) from tablea where column1 = 'Item1')
);
您需要知道的是您想要匹配的产品..又名哪个项目