如何将condos_pranks表关联到主查询以获取完整prank数据?
解决方法
你原来的查询以dares表为起点,这就导致只能获取到dares里关联的prank,拿不到condos_pranks中独有的那些数据。正确的做法应该以condos_pranks作为主表,这样才能覆盖所有需要的prank,再通过左连接关联dares来匹配已有的dare值,没有匹配到的就用No填充。
最终的SQL查询语句如下:
SELECT DISTINCT p.prank, COALESCE(d.dare, 'No') AS dare FROM condos_pranks pd INNER JOIN pranks p ON p.id = pd.prank_id LEFT JOIN dares d ON d.condo_id = pd.condo_id AND d.prank_id = pd.prank_id WHERE pd.condo_id = 1;
语句说明:
- 以
condos_pranks为主表,筛选condo_id=1的所有记录,确保能拿到你需要的prank_id(1,4,5,6)。 - 内连接
pranks表,获取对应的prank名称(L,O,P,Q等)。 - 左连接
dares表,关联条件同时匹配condo_id和prank_id,这样能把dares中存在的dare值关联过来。 - 用
COALESCE(d.dare, 'No')处理默认值:如果dares中没有匹配的记录,dare字段就显示No。 - 加上
DISTINCT确保prank数据唯一,避免同一个prank因为关联问题重复出现。
执行这个查询后,就能得到你期望的结果:
| prank | dare |
|---|---|
| L | Yes |
| M | No |
| N | Maybe |
| O | No |
| P | No |
| Q | No |
内容的提问来源于stack exchange,提问作者yvgwxgtyowvaiqndwo
相关产品推荐
相关产品推荐

