gpt4 book ai didi

MySQL 连接 3 个表自反关系

转载 作者:行者123 更新时间:2023-11-29 23:50:39 24 4
gpt4 key购买 nike

我正在使用以下脚本:

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);

显示作者的真实姓名。

如您所见,我有很多表格,但我希望这些表格“提供”下表,以便显示如下:

  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”等作者显示他们的真实姓名,而那些没有其他名字的作者则如“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 列在 autor 表。它们包含在这里是为了演示更一般的情况,其中可能有多个“匹配”行;SELECT 列表中的子查询只允许返回单个表达式,并且单行。LIMIT 1 子句将其限制为单行,并且 ORDER BY 确定将返回哪个可能的值。)

关于MySQL 连接 3 个表自反关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25675317/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com