我有一张'照片'表:
photoID (INT), setID (INT)....
18900 , 234 , ...
18901 , 234 , ...
18902 , 234 , ...
18903 , 249 , ...
18904 , 249 , ...
18905 , 249 , ...
我还有一张'photoKeyword'表:
photoID (INT), keywordID (INT)
18900 , 12
18900 , 21
18901 , 17
18905 , 26
18905 , 10
从上面的示例中可以看出,照片18902,18903和18904 NOT 在photoKeyword表中有任何关键字。这正是我想要建立的。
我正在尝试生成一个photoID列表,该列表没有关键字,但一次只有一个setID。你可以看到,照片18902没有关键字,18903和18904也没有,但这三张照片有两个不同的setID。
所以运行此查询一次,应该只返回照片18902.然后我会在此照片中添加关键字,这样就不会再出现问题了。下次我运行查询时,它应该返回照片18903和18904,下一组(setID:249)没有关键字的照片。
这怎么可能?是否可以只使用SQL?我希望你能理解我想要实现的目标,我只是在写这篇文章而迷失自我!!
感激不尽的任何想法......
答案 0 :(得分:0)
试
SELECT X.photoID FROM photos X
INNER JOIN
(SELECT DISTINCT P.setID FROM
photos P
LEFT OUTER JOIN (SELECT K.photoID, COUNT(*) C FROM photoKeyword K GROUP BY K.photoID) KC ON KC.photoID = P.photoID
GROUP BY P.setID
HAVING SUM (KC.C) < 1) Y ON X.setID = Y.SetID
答案 1 :(得分:0)
SELECT photoID
, setID
FROM photos
WHERE photoID NOT IN
( SELECT photoID
FROM photoKeyword
)
AND setID =
( SELECT setID
FROM photos
WHERE photoID NOT IN
( SELECT photoID
FROM photoKeyword
)
ORDER BY setID
LIMIT 1
)
答案 2 :(得分:0)
这可能就是你需要的东西,这很简单......当你想到它时......确保你的关键字表上有照片id的索引
select
p.PhotoID,
p.SetID
from
Photos p
LEFT JOIN photoKeyword pkey
on p.PhotoID = pkey.PhotoID
where
pkey.PhotoID = null
通过执行LEFT连接,我们知道它将始终尝试第二个表。然后,如果第二个表没有匹配项,我们知道尝试加入的ID将为null ...因此,左连接并仅返回第二个表中答案为NULL的那些ID。