SQL查询问题:如何获取ID=5及其关联的相关数据
解决方法
你的需求是获取id=5的行,以及和它关联的、id等于该行cp_id的记录。原SQL有两个核心问题:
- 条件逻辑错误:你写的
WHERE cp_id = (SELECT cp_id FROM table where id = 5)是找cp_id等于112的行,但实际需要找的是id等于112的行(也就是和id=5的行通过cp_id关联的记录) - 使用
UNION会自动去重,即使条件正确,也可能因去重丢失数据(此处无重复,但UNION ALL更高效)
方案1:最简洁的OR条件查询
SELECT * FROM table WHERE id = 5 OR id = (SELECT cp_id FROM table WHERE id = 5)
方案2:修正条件后的UNION ALL写法
SELECT * FROM table WHERE id = (SELECT cp_id FROM table where id = 5) UNION ALL SELECT * FROM table WHERE id = 5
方案3:自连接+EXISTS子查询
SELECT t.* FROM table t WHERE t.id = 5 OR EXISTS ( SELECT 1 FROM table t2 WHERE t2.id = 5 AND t.id = t2.cp_id )
以上三种方法都能得到你期望的结果:
| cp_id | id | value |
|---|---|---|
| 112 | 5 | ok |
| 3369 | 112 | ok |
内容的提问来源于stack exchange,提问作者Cesc
相关产品推荐
相关产品推荐

