Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.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
Sql 获取具有相同id且必须组合某些值的行_Sql_Select - Fatal编程技术网

Sql 获取具有相同id且必须组合某些值的行

Sql 获取具有相同id且必须组合某些值的行,sql,select,Sql,Select,我有两张桌子,如下所示: TableA ------------ a_id a_attribute TableB ------------ b_id b_attribute 数据: 我试图找出如何匹配它,如果b_id的b_属性值为1,2,3,它将匹配a_id 1,如果b_属性的值为4,5,6,它应该匹配a_id 2 在这种情况下,我希望输出为: b_id a_id 1 1 3 2 非常感谢您的帮助 如果共享属性的数量是固定的,则可能会连接属性列上的表,并根据

我有两张桌子,如下所示:

TableA
------------
a_id
a_attribute


TableB
------------
b_id
b_attribute
数据:

我试图找出如何匹配它,如果b_id的b_属性值为1,2,3,它将匹配a_id 1,如果b_属性的值为4,5,6,它应该匹配a_id 2

在这种情况下,我希望输出为:

b_id    a_id
1       1
3       2

非常感谢您的帮助

如果共享属性的数量是固定的,则可能会连接属性列上的表,并根据计数进行过滤。比如:

SELECT b.b_id, a.a_id FROM TableA a
INNER JOIN TableB b ON a.a_attribute = b.b_attribute
GROUP BY a.a_id, b.b_id
HAVING COUNT(*) = 3

这将为您提供的示例数据提供正确的输出。

请阅读
JOIN
UNION
。您可能需要在这里同时使用这两个数据库。虽然这个问题并不真正需要,但指定您正在使用的DBMS(Postgres、Oracle等)总是很好的。请原谅我对这个主题的无知,但这是否意味着它将返回每个a_id和b_id,其中发现3行存在匹配症状?@user2989484是的。即使两个表中的一个表有三个以上的属性,它也只会返回正好有三个共享属性的行。好吧,尽管它很有帮助,但它并不能完全解决我的问题,因为我需要它是属性的组合(即1,2,3或4,5,6),并且将来可能用于三个以上(13,14,15,16).不过我很感谢你的帮助!
SELECT b.b_id, a.a_id FROM TableA a
INNER JOIN TableB b ON a.a_attribute = b.b_attribute
GROUP BY a.a_id, b.b_id
HAVING COUNT(*) = 3