mysql - SQL - 混淆查询

标签 mysql sql

我有一个“照片”表:

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 在 photoKeyword 表中没有任何关键字。这正是我要建立的。

我试图生成一个没有关键字但一次只有一个 setID 的 photoID 列表。如您所见,照片 18902 没有关键字,18903 和 18904 也没有关键字,但这三张照片有两个不同的 setID。

所以运行这个查询一次,应该只返回照片 18902。然后我会为这张照片添加关键字,这样就不会再有问题了。下次我运行查询时,它应该返回照片 18903 和 18904,即下一组 (setID:249) 没有关键字的照片。

这怎么可能?是否可以仅使用 SQL?我希望你能理解我想要实现的目标,我只是在写它而迷失了自己!!

感谢收到的任何想法......

最佳答案

尝试

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

关于mysql - SQL - 混淆查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7697315/

相关文章:

mysql - 如何以编程方式删除 MySQL View 的列?

java - 使用 spring 处理请求时如何不返回

php - 从 1 个表中获取值,该表也在另一个表中且不在另一个表中

php - 如何基于 GET 搜索选择多个字段?

mysql - 超过 1 个具有相同 ID 的记录在与另一个表连接后提供双重数据

mysql - 按值之和限制查询

mysql - 满足条件时对行进行分组

mysql - 选择早于 x 天的日期计数

sql - 计数不从包中加载架构模型。 (微软.SqlServer.Dac)

sql - 如何从命令行测试 SQL 的有效性?