从MySql中的两个相关列中选择数据

从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 | 模式

表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

在我看来,你实际上是在追求这个:

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)