我已经完成了SQL连接多年,但是由于某种原因,这使我感到困惑。我有两个这样的表:
task
:
taskid description created_date target_date
1 test 01-01-2019 2/1/2019
2 test 01-01-2019 2/1/2019
3 test 01-01-2019 2/1/2019
4 test 01-01-2019 2/1/2019
task_tag
:
taskid tagid created date
1 1 1/1/2019
1 2 1/1/2019
1 3 1/1/2019
1 4 1/1/2019
2 1 1/1/2019
2 2 1/1/2019
2 3 1/1/2019
2 4 1/1/2019
我尝试使用taskid
在task_tag表中查询包含1个以上特定tagid
的taskid。
例如,查询可能看起来像这样:
SELECT tsk.task_id, tsk.description, tsk.created_date, tsk.target_date
FROM task_tags tag
JOIN task tsk ON tsk.task_id = tag.task_id
WHERE tag.tag_id = 1 AND tag.tag_id = 2 AND tag.tag_id = 3
我希望获得与任务表类似的输出,但是由taskid
过滤的tag.tag_id
匹配where子句的输出。有道理吗?
答案 0 :(得分:0)
在task_tag表中查询包含多个特定tagid的taskid
我想您应该使用适当的"//input[@placeholder='your@email.com']"
子句进行聚合:
HAVING
此查询将返回具有(至少)SELECT task_id
FROM task_table
GROUP BY task_id
HAVING
MAX(tag_id = 1) = 1
AND MAX(tag_id = 2) = 1
AND MAX(tag_id = 3) = 1
task_id
,tag_id
和1
的{{1}}个。
2
构造利用了很好的MySQL功能,其中条件满足时返回3
,反之则返回MAX(tag_id = 1)
。因此,这实际上意味着:此1
的{{1}}中的至少一个具有值0
。
如果您想获取所有tag_id
的详细信息,则可以使用task_id
表简单地1
进行查询:
task_id
答案 1 :(得分:0)
您可以尝试:
SELECT tsk.task_id
, tsk.description
, tsk.created_date
, tsk.target_date
, count(tag.tag_id) as tagCount FROM task tsk JOIN task_tags tag ON tag.task_id = tsk.task_id
And tag.tag_id in (1, 2, 3)
Group by tsk.task_id
, tsk.description
, tsk.created_date
, tsk.target_date Having count(tag.tag_id) > 1