首页 > 解决方案 > SQL 左连接查询以匹配结果中的所有限制

问题描述

我正在尝试过滤某些类别的数据,在这些类别中我得到的结果与所有给定的 slug / 类型参数匹配。目前我陷入了扩展我当前的查询以通过单个查询获取数据的问题。我当前的查询如下所示:

SELECT t.slug, tc.t_id, tc.c_id 
  FROM tc 
LEFT JOIN t ON t.id = tc.t_id 
WHERE 
  (t.type = 'offerAges' AND t.slug = '14-16') 
  OR 
  (t.type = 'offerSportTypes' AND t.slug = 'football')

给我以下结果:

#   slug        t_id    c_id    
1   football    13      40
2   14-16       28      39
3   14-16       28      40

我想要的结果是我只得到 t_id 和 c_id 匹配的结果。例如,在我的表中,项目 1 和 3。

小提琴:https ://www.db-fiddle.com/f/vQUU9C9iXj4gotE7YGDq6W/1

标签: mysqlsql

解决方案


您可以使用聚合。在这种情况下:

SELECT tc.c_id 
FROM tc JOIN
     t
     ON t.id = tc.t_id 
WHERE (t.type = 'offerAges' AND t.slug = '14-16') OR 
      (t.type = 'offerSportTypes' AND t.slug = 'football')
GROUP BY tc.c_id 
HAVING COUNT(DISTINCT t.type) = 2;

如果你想要蛞蝓,我建议使用GROUP_CONCAT()将它们放在一个列中:

GROUP_CONCAT(t.slug)

推荐阅读