需要在两个表之间执行SQL连接,并且需要比较多个不同的行

时间:2019-02-25 22:16:41

标签: mysql sql join

我已经完成了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子句的输出。有道理吗?

2 个答案:

答案 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_idtag_id1的{​​{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