Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 要检索的列数据的精确匹配_Mysql_Sql_Oracle_Join_Inner Join - Fatal编程技术网

Mysql 要检索的列数据的精确匹配

Mysql 要检索的列数据的精确匹配,mysql,sql,oracle,join,inner-join,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

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

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    
现在,我只需要在两个表的第2列中的所有值都匹配时,从表B中获取第3列。应忽略第3项,因为并非表B中第2列的所有值都与表A第2列相匹配

我期待的最终结果是

Column1 Column2 Column3
Item1   Code1    10
Item1   Code2    10
Item1   Code3    10
Item1   Code4    10

建议使用此SQL。

尝试使用子查询进行内部联接。。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(*) = (SELECT count(*) from tablea where column1 = 'Item1')
);

你只需要知道你想要匹配的产品。。aka哪个项目

为什么您的标签中有多个DBs?如果项目3有代码4怎么办?您是否应该看到第1项8次?对于代码,第3列的第1项的值应为201@user3723562根据您的评论“代码1的第3列第1项的值应为20”,我认为您确实需要重新思考您的问题。。。因为wat@Kritner否op只想显示与特定不同项目具有内部连接的“代码”数量匹配的项目的对应列3,这将导致检索代码1/code2/code3的项目3,对吗
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')
);