要检索的列数据的完全匹配

时间:2014-08-15 14:39:13

标签: mysql sql oracle join inner-join

我有这样的场景,我只需要在两个不同的表中的两列完全匹配时才需要检索记录

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。

1 个答案:

答案 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
);

DEMO

输出

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')
);

您需要知道的是您想要匹配的产品..又名哪个项目