繁体   English   中英

加入两个共享共同祖父母但不是父母的表

[英]JOIN two tables that share a common grandparent, but not parent

我正在尝试解压缩一个组织图像和文本的布局系统,如下所示:

布局

挑战在于我需要(以某种方式)将每个text.content与其条目和它后面的第一个images.filename相关联。 基本上介绍了第二代堂兄弟。

理想情况下,我会得到类似的东西:

| entry.id  | images.filename  | texts.content
|-----------|------------------|--------------
| 0         | img.jpg          | lorem  

我以前使用一系列LEFT JOIN成功地将图像与其条目相关联,如下所示:

SELECT entries.id, images.filename 
FROM images 
LEFT JOIN containers 
    ON images.container_id = containers.id 
LEFT JOIN layers 
    ON containers.layer_id = layers.id 
LEFT JOIN entries 
    ON layers.entry_id = entries.id

但这在尝试将文本连接到图像时不起作用,因为它们没有直接关联。 您必须将 go 提高到入门级才能确定关联,但是您如何跟踪最接近图像的最佳候选?

目前

我觉得我正在接近一些至少将图像和文本与同一个条目相关联的东西:

SELECT entries.id, images.filename, texts.content
FROM entries, images, texts
LEFT JOIN containers a 
    ON texts.container_id = a.id 
LEFT JOIN containers b
    ON images.container_id = b.id 
LEFT JOIN layers 
    ON containers.layer_id = layers.id 
LEFT JOIN entries 
    ON layers.entry_id = entries.id

尽管出于某种原因,这仍然会退回Not unique table/alias: 'entries'

到目前为止,我已经尝试了这里建议的别名内容(这似乎并不适用)并开始破解处理子查询的问题,但是......我已经用完了搜索词。

这甚至可能吗?

需要明确的是,我不是在这里寻找完整的答案,只是关于如何使用 JOIN 执行以下操作的一些提示:

A)显示文本和图像及其条目关联(我想我在这里很接近。)

B)将一个文本条目与来自它后面的任何图像条目的数据相关联。 . 现在这感觉像是不可能的,但我想这就是为什么我要问比我了解更多的人。

编辑:请注意,可以有多个图层包含图像或文本,我需要从每个条目返回所有文本。

看着你的架构似乎你可以尝试使用基于 select 文件名和文本的联合的假聚合 function

SELECT id, max(filename) filename, max(content) content 
FROM (
    SELECT entries.id, images.filename, NULL content
    FROM entries
        INNER JOIN layers 
            ON entries.id  = layers.entry_id
        INNER JOIN containers 
            ON containers.layer_id = layers.id
        INNER JOIN images 
            ON images.container_id = containers.id
    UNION ALL 
    SELECT entries.id, NULL, texts.content
    FROM entries
        INNER JOIN layers 
            on entries.id  = layers.entry_id
        INNER JOIN containers 
            on containers.layer_id = layers.id
        INNER JOIN texts 
        ON texts.container_id = containers.id ) t
GROUP BY id 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM