Sql 如何选择属性可以有两个值的行

Sql 如何选择属性可以有两个值的行,sql,Sql,我有一个名为site_attributes的表,它看起来类似于: siteId attributeId tier ------------------------------- site1id attribute1id 1 site1id attribute2id 1 site1id attribute3id 1 如何从表中选择attributeId等于attribute1id且attributeId等于attribute3id的唯一站点id

我有一个名为site_attributes的表,它看起来类似于:

siteId     attributeId     tier
-------------------------------
site1id    attribute1id    1
site1id    attribute2id    1
site1id    attribute3id    1
如何从表中选择attributeId等于attribute1id且attributeId等于attribute3id的唯一站点id

SELECT siteId, count(*) ct
FROM TableName
WHERE attributeId IN ('attribute1id', 'attribute3id')
GROUP BY siteId
HAVING ct = 2


如果site1id有两个attributeId值相同,则第一个查询可能无法正常工作。也就是说,如果attribute3id是attribute1id,它仍然会输出site1id,这不是用户想要的。然而,您的第二个查询应该会产生正确的结果。@Ahmedov通常,像这样的关系表是用
(siteId,attributeId)
作为唯一的复合键来设计的,我只是做了一个简化的假设。而且它可能比连接更有效。
SELECT t1.siteId
FROM TableName t1
JOIN TableName t2 USING (siteId)
WHERE t1.attributeId = 'attribute1id'
AND t2.attributeId = 'attribute3id'