[英]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 BY
和LIMIT
可能並不需要子句在您的查詢特別是如果。 id_autor
列是UNIQUE autor
表他們要在這里包括證明更一般的情況,其中可能有不止一個“匹配”。行; SELECT列表中的子查詢只允許返回一個表達式和單個行。LIMIT1子句將其限制為單個行,而ORDER BY
確定將返回哪個可能值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.