mysql - 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。
解决方案
您可以使用聚合。在这种情况下:
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)
推荐阅读
- php - 如何在 wordpress 中调用 php 类?
- ios - Convert an iPad Playground to a Xcode 10 Playground
- javascript - seconds in a circle corner (like a clock)
- azure - 如何自动部署 Azure API 管理?
- c++ - 向 std::deque 迭代器添加值是否安全
- amazon-web-services - AWS SES 服务用于使用 java 发送邮件
- vhdl - 添加 bit_vectors 时,为什么会得到“找到运算符“+”的“0”定义”?达美延误是一个因素吗?
- http - golang http.Post 请求返回响应 404
- android - Firebase Recycleview 重复图像
- css - 在提交时显示感谢信息