[英]SQL Query with 3 tables and a subquery on same table
我有3張桌子,看起來像這樣:
Personne
Id_Personne | Prenom_personne | Nom_personne
11 | Jean | Dupont
13 | Albert | Martin
Relation_personne
Id_Personne | Id_Relation | Id_Personne_Famille
11 | 5 | 13
13 | 3 | 11
關系
Type_relation | ID_Relation
Fils de | 5
Père de | 3
我試圖獲得這個:
Id_Personne | Prenom_personne | Nom_personne | Parenté
11 | Jean | Dupont | Fils de Albert Martin
13 | Albert | Martin | père de Jean Dupont
這是我現在的SQL查詢:
CREATE TABLE Vue_personne
SELECT Personne.Id_personne, Personne.Nom_personne AS Nom, Personne.Prenom_personne AS Prenom,
CONCAT (Relation.Type_relation,' ', Personne.Nom_personne =
(SELECT Personne.Prenom_personne FROM Personne
WHERE Personne.Id_Personne = Relation_Personne.Id_Personne_Famille),' ',
Personne.Nom_personne = (SELECT Personne.Prenom_personne FROM Personne
WHERE Personne.Id_Personne = Relation_Personne.Id_Personne_Famille)) AS Parenté
FROM Personne
LEFT JOIN Relation_Personne ON Relation_Personne.Id_Personne_Famille = Personne.Id_Personne
LEFT JOIN Relation ON Relation.Id_Relation = Relation_Personne.Id_Relation
GROUP BY Personne.Id_personne
感謝您的任何建議。
與Personne
一起使用join
select p2.Id_Personne, p2.Prenom_personne,p2.Nom_personne
,p1.Prenom_personne||' '||p1.Nom_personne||' '||r.Type_relation from
Relation_personne rp join
Relation r on rp.ID_Relation=r.ID_Relation
join Personne p1 on p1.Id_Personne =rp.Id_Personne_Famille
join Personne p2 on p2.Id_Personne=rp.Id_Personne
您需要來自Personne
兩個(可能)不同記錄中的值。 因此,您需要在同一查詢中兩次使用Personne
,並進行適當的聯接,每個聯接都有一個別名以區分它們。
SELECT
p.id_personne,
p.prenom_personne,
p.nom_personne,
(
r.type_relation || ' ' || op.prenom_personne || ' ' || op.nom_personne
) AS parenté
FROM personne AS p
INNER JOIN relation_personne AS rp USING (id_personne)
INNER JOIN relation AS r USING (id_relation)
INNER JOIN personne AS op ON (rp.id_personne_famille = op.id_personne)
;
用您的示例數據:
CREATE TABLE personne (
id_personne integer PRIMARY KEY,
prenom_personne varchar,
nom_personne varchar );
INSERT INTO personne ( id_personne, prenom_personne, nom_personne ) VALUES
( 11, 'Jean', 'Dupont' ),
( 13, 'Albert', 'Martin' );
CREATE TABLE relation (
type_relation varchar,
id_relation integer PRIMARY KEY );
INSERT INTO relation ( id_relation, type_relation ) VALUES
( 5, 'Fils de' ),
( 3, 'Père de' );
CREATE TABLE relation_personne (
id_personne integer
REFERENCES personne (id_personne),
id_relation integer
REFERENCES relation (id_relation),
id_personne_famille integer
REFERENCES personne (id_personne) );
INSERT INTO relation_personne ( id_personne, id_relation, id_personne_famille ) VALUES
( 11, 5, 13 ),
( 13, 3, 11 );
上面的查詢返回:
id_personne | prenom_personne | nom_personne | parenté
-------------+-----------------+--------------+-----------------------
11 | Jean | Dupont | Fils de Albert Martin
13 | Albert | Martin | Père de Jean Dupont
符合您想要的結果集。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.