[英]Select data from two related columns in MySql
表 proyectos 有两个相关的列, id_pro和id_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 |
您需要表的内部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.