Mysql 连接两个表,同时按索引分组并为多个外部ID进行加工
我有以下三个表格: 对象:Mysql 连接两个表,同时按索引分组并为多个外部ID进行加工,mysql,join,group-by,Mysql,Join,Group By,我有以下三个表格: 对象: ObjectID ObjectDescription 1 "first" 2 "second" 属性: AttributeID AttributeDescription 1 "att1" 2 "att2" 3 "att3" 4 "att4" 属性链接: AttributeID ObjectID 1 1 2 1 4
ObjectID ObjectDescription
1 "first"
2 "second"
属性:
AttributeID AttributeDescription
1 "att1"
2 "att2"
3 "att3"
4 "att4"
属性链接:
AttributeID ObjectID
1 1
2 1
4 1
现在我的问题是:我想选择一些属性,并想知道哪个对象具有我选择的所有属性。我尝试了以下方法:
SELECT * FROM `objects`
INNER JOIN `attributelink`
ON `objects`.`ObjectID` = `attributelink`.`ObjectID`
WHERE `attributelink`.`AttributeID` =1 AND `attributelink`.`AttributeID` =2
GROUP BY `objects`.`ObjectID`
这显然不起作用,因为一行不能有2个AttributeId,但我如何存档它呢?对于要检查的每个选定属性,您必须在
attributelink
表中加入一次:
SELECT o.ObjectID
FROM objects o
INNER JOIN attributelink a1 ON o.ObjectID = a1.ObjectID AND a1.AttributeID = 1
INNER JOIN attributelink a2 ON o.ObjectID = a2.ObjectID AND a2.AttributeID = 2
GROUP BY o.ObjectID
您的测试数据并没有显示它是否有效,但是FWIW
另一种方法是使用
COUNT DISTINCT
和have
和GROUP BY
():
如果选择2个属性,那么您希望对象列出具有这两个属性的对象吗?因此,在WHERE子句中,使用这两个属性。然后使用GROUP BY函数对对象进行分组,以获取计数(属性)=2的对象
SELECT o.ObjectID
FROM objects o
INNER JOIN attributelink a ON o.ObjectID = a.ObjectID
WHERE a.AttributeID IN (1,2) --here you filter the rows on the attributes to test
GROUP BY o.ObjectID
HAVING COUNT(DISTINCT(a.AttributeID)) = 2 --# of attributes, means "having ALL"