簡體   English   中英

MySQL加入3個表的自反關系

[英]MySQL Join 3 Tables Reflexive Relation

我正在使用以下腳本:

SELECT autor.id_autor as 'ID de Autor', 
autor.nom_autor as 'Nombre Autor',
CASE autor.id_autor
WHEN  ISNULL(autor.pseudo_id = autor.id_autor ) THEN  nom_autor
ELSE  null
END 
'Autor Real', -- nombre de la columna de la tabla

articulo.id_art as 'ID de Articulo',
articulo.nom_art as 'Nombre de Articulo'
FROM autor
LEFT JOIN art_aut ON (art_aut.id_autor = autor.id_autor)
LEFT JOIN articulo ON(articulo.id_art = art_aut.id_art);

顯示aun作者的真實姓名。

正如您所看到的,我有很多表,但是我希望這些表可以“饋送”下表,以便如下所示:

  ID de Autor   Nombre Autor   Autor Real  ID de Articulo   Nombre Articulo
     A3            Quijote       Luis           1             El origen

我有一個稱為autor的表,如下所示:

id_autor   nom_autor    RFC      pseudo_id
 A1         J Salinas   ADAD12    
 A3         Quijote                 A7
 A7         Luis        LIDSDS      

如您所見,表引用了它自己,但我不知道我必須寫什么樣的指令才能使“ Quijote”這樣的作者顯示其真實姓名,而沒有另一個名字的人如Juanito Salinas,保持不變,因為他們在pseudo_id列中沒有記錄

提前致謝!

我不完全了解您的查詢。

如果我理解正確的話,你的autor表作為指定的列pseudo_id ,這是一個外鍵引用id_autor在同一個表中的列。

要檢索相關的行,您可以執行JOIN操作,可能需要“外部”聯接,以便返回autor故事中的所有行以及“匹配”行(如果有的話)。

例如:

SELECT a.id_autor
     , a.nom_autor
     , r.nom_autor AS `Autor Real`
     , ...

  FROM autor a
  LEFT
  JOIN autor r ON r.id_autor = a.pseudo_id

找到匹配的行時, Autor Real值將具有被引用行( r )中nom_autor列中的值,否則它將為NULL。

這里的“技巧”是您需要在查詢中有第二個對autor表的引用,以檢索第二(相關)行。 好像第二個對autor表的引用是對另一個表的引用,就像您的查詢所引用的任何其他表一樣。


作為另一個(通常是性能較低的)替代方案,您可以使用關聯的子查詢代替JOIN操作。

例如:

SELECT a.id_autor
     , a.nom_autor
     , ( SELECT r.nom_autor 
           FROM autor r
          WHERE r.id_autor = a.pseudo_id
          ORDER BY r.nom_autor
          LIMIT 1
       ) AS `Autor Real`
     , ...
  FROM autor a

這是SELECT列表中的“相關”子查詢。 該查詢引用外部查詢中的一列,並且該子查詢針對外部查詢返回的每一行執行。)如果子查詢未返回值,則外部查詢返回NULL值。

(注: ORDER BYLIMIT可能並不需要子句在您的查詢特別是如果。 id_autor列是UNIQUE autor表他們要在這里包括證明更一般的情況,其中可能有不止一個“匹配”。行; SELECT列表中的子查詢只允許返回一個表達式和單個行。LIMIT1子句將其限制為單個行,而ORDER BY確定將返回哪個可能值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM