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