簡體   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