从MySql中的两个相关列中选择数据
表proyectos有两个相关列,id_pro和id_padre 如何从id_pro 3的服务获取所有数据,以及id_padre 3的所有服务 编辑** 预期产量从MySql中的两个相关列中选择数据,mysql,Mysql,表proyectos有两个相关列,id_pro和id_padre 如何从id_pro 3的服务获取所有数据,以及id_padre 3的所有服务 编辑** 预期产量 id_ser | id_pro | nom_ser | 3 | 3 | Servicio c | 4 | 3 | Servicio d | 5 | 4 | Servicio e | 6 | 5 | Servicio f | 模式
id_ser | id_pro | nom_ser |
3 | 3 | Servicio c |
4 | 3 | Servicio d |
5 | 4 | Servicio e |
6 | 5 | Servicio f |
模式与查询
产出:
id_ser id_pro nom_ser
3 3 Servicio c
4 3 Servicio d
5 4 Servicio e
在我看来,你实际上是在追求这个:
SELECT *
FROM servicios
WHERE id_pro = 3
UNION
SELECT s.*
FROM servicios s
JOIN proyectos p
ON p.id_pro = s.id_pro
WHERE p.ot_padre = 3;
有多种编写方法,包括使用COALESCE的左连接您需要表的内部连接:
SELECT s.*
FROM servicios s INNER JOIN proyectos p
ON p.id_pro = s.id_pro
WHERE 3 IN (p.id_pro, p.ot_padre)
看。
结果:
身份证
身份证
名字
3.
3.
服务c
4.
3.
服务d
5.
4.
服务
6.
5.
服务f
DISTINCT*要么是矛盾修饰法,要么是重言式,这取决于你的观点。它在任何情况下都是无用的。你介意详细说明吗?如果*和DISTINCT*返回的内容不同,那么你的模式就会有严重的问题。@maio290用预期的输出编辑,预期的结果应该是什么样的?请相应地编辑您的问题。@已编辑
SELECT *
FROM servicios
WHERE id_pro = 3
UNION
SELECT s.*
FROM servicios s
JOIN proyectos p
ON p.id_pro = s.id_pro
WHERE p.ot_padre = 3;
SELECT s.*
FROM servicios s INNER JOIN proyectos p
ON p.id_pro = s.id_pro
WHERE 3 IN (p.id_pro, p.ot_padre)