我会建议使用2联接
SELECT *
FROM photo
JOIN photo_selectedTags as photo_selectedTags6 -- this join restricts to 'photo.COUNTER' whic have TAGS_COUNTER = 6
ON photo.COUNTER = photo_selectedTags6.PHOTO_COUNTER
AND photo_selectedTags6.TAGS_COUNTER = 6
JOIN photo_selectedTags as photo_selectedTags192 -- this join restricts to 'photo.COUNTER' whic have TAGS_COUNTER = 192
ON photo.COUNTER = photo_selectedTags192.PHOTO_COUNTER
AND photo_selectedTags192.TAGS_COUNTER = 192
也有可能实现它与一个alytical功能(如果你的数据库支持)
-- This one works on teradata. Something similar should work on oracle. Don't know about others
SELECT *
FROM photo
LEFT JOIN photo_selectedTags
ON photo.COUNTER = photo_selectedTags.PHOTO_COUNTER
QUALIFY max(case when photo_selectedTags.TAGS_COUNTER = 6 then 1 end) over (partition by photo.COUNTER) = 1
AND max(case when photo_selectedTags.TAGS_COUNTER = 192 then 1 end) over (partition by photo.COUNTER) = 1
如果您在列表中(除192,6)有多个值,那么这可能是可行的解决方案
SELECT *
FROM photo
JOIN
(
SELECT PHOTO_COUNTER, count(distinct TAGS_COUNTER) cnt
FROM photo_selectedTags
WHERE TAGS_COUNTER in (192,6)
HAVING cnt = 2 -- adjust this according to the number of different values
) as pht
ON photo.COUNTER = pht.PHOTO_COUNTER
在子查询只PHOTO_COUNTERs剩下的都是(192和6),那么这是加入
您是否试图用IN替换ALL? – supertopi 2012-03-13 19:42:24
我个人会这样做'WHERE photo_selectedTags.TAGS_COUNTER = 6 AND photo_selectedTags.TAGS_COUNTER = 192' – ScottJShea 2012-03-13 19:44:11
当我使用AND子句时,它不会返回任何行,即使我是积极的存在。我认为存在的问题是,有一个照片行,但2 photo_selectedTags单行(一个是6,一个是192) – 2012-03-13 19:47:46