这里可能有一个简单的解决方案,但它似乎让我绊倒了。我正在尝试根据两列中的值数组查询表。这是相关的表结构和样本数据
comment table
id, userId, articleId .... etc etc
article table
id, userId .... etc etc
Data: UserIds = 3, 10. ArticleIds = 1, 2
假设我正在尝试查找特定文章ID的所有评论:1,2
我可以轻松使用此查询
select * from comments WHERE articleId IN(1,2)
然而,这里变得复杂。我有一个在评论查询之前执行的查询,用于确定相应的文章ID。这些ID在一个数组中。在数组中还有每篇文章的相应用户ID。
我现在要做的是查询注释表中仅查看数组中的文章(1,2)并仅查询原作者(3,10)的注释。
上面的简单查询将返回articleId 1和20的所有注释。例如,我无法弄清楚在哪里添加另一个条件,其中说明了对于articleId,20和相应的userId,3,10的onyl注释。
非常感谢任何帮助或建议!
答案 0 :(得分:1)
你试过吗
select * from comments WHERE articleId IN(1,2) and authorId in (3,10)
如果没有,请更新您的问题原因。
答案 1 :(得分:1)
我认为最简单的方法是写:
SELECT comments.*
FROM articles
JOIN comments
ON articles.id = comments.articleId
AND articles.userId = comments.userId
WHERE articles.id IN (1, 2)
;
AND articles.userId = comments.userId
条款强制执行您的“仅针对原作者的评论”要求。
或者,您可以使用EXISTS
子句:
SELECT *
FROM comments
WHERE articleId IN (1, 2)
AND EXISTS
( SELECT 1
FROM articles
WHERE id = comments.articleId
AND userId = comments.userId
)
;
或单行子查询:
SELECT *
FROM comments
WHERE articleId IN (1, 2)
AND userId =
( SELECT userId
FROM articles
WHERE id = comments.articleId
)
;
答案 2 :(得分:0)
您可以根据需要添加任意数量的IN
语句:
select * from comments WHERE articleId IN(1,2) AND userId IN (3,10)
答案 3 :(得分:0)
你不能只是在你声明的查询中创建首先运行子查询的查询:
SELECT * FROM `comments` WHERE `articleId` IN(1,2) AND `userId` IN (__subquery__)
答案 4 :(得分:0)
- 您可以使用子查询
select * from comments WHERE articleId IN(1,2)
and userId in ( select userId from article where id in (1,2) )