繁体   English   中英

MySql 中两个相关列的 Select 数据

[英]Select data from two related columns in MySql

表 proyectos 有两个相关的列, id_proid_padre

    CREATE TABLE IF NOT EXISTS `proyectos` (
  `id_pro` int(8) unsigned NOT NULL,
  `ot_padre` int(8) unsigned NOT NULL,
  `nom_pro` varchar(255) NOT NULL,
  PRIMARY KEY (`id_pro`)
) DEFAULT CHARSET=utf8;
INSERT INTO `proyectos` (`id_pro`, `ot_padre`, `nom_pro`) VALUES
  ('1', '0', 'Proyecto 1'),
  ('2', '0', 'Proyecto 2'),
  ('3', '0', 'Proyecto 3'),
  ('4', '3', 'Proyecto hijo 1'),
  ('5', '3', 'Proyecto hijo 2');

CREATE TABLE IF NOT EXISTS `servicios` (
  `id_ser` int(8) unsigned NOT NULL,
  `id_pro` int(8) unsigned NOT NULL,
  `nom_ser` varchar(255) NOT NULL,
  PRIMARY KEY (`id_ser`)
) DEFAULT CHARSET=utf8;
INSERT INTO `servicios` (`id_ser`, `id_pro`, `nom_ser`) VALUES
  ('1', '1', 'Servicio a'),
  ('2', '1', 'Servicio b'),
  ('3', '3', 'Servicio c'),
  ('4', '3', 'Servicio d'),
  ('5', '4', 'Servicio e'),
  ('6', '5', 'Servicio e');

如何从 id_pro 3 的服务获取所有数据,以及 id_padre 3 的所有服务?

编辑**

预计 output

id_ser |  id_pro |   nom_ser   |
3      |  3      |  Servicio c |
4      |  3      |  Servicio d |
5      |  4      |  Servicio e |
6      |  5      |  Servicio f |

架构和查询http://sqlfiddle.com/#!9/a1e0dc/1/0

您需要表的内部INNER

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)

请参阅演示
结果:

id_ser id_pro nom_ser
3 3 服务 c
4 3 服务
5 4 服务
6 5 服务
SELECT DISTINCT * FROM Servicios 
WHERE id_pro = 3
OR id_pro IN 
    (SELECT id_pro 
    FROM Proyectos 
    WHERE id_padre = 3)

输出:

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 的 LEFT JOIN)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM