代码之家  ›  专栏  ›  技术社区  ›  The50

MySQL选择ID所在的位置(选择另一个表)

  •  -1
  • The50  · 技术社区  · 6 年前

    问题是我需要从表中选择值

    category_filter_relations
    
    id   modification_id
    

    category_filter_relations_items
    
    id   modification_id   category_filter_relation_id
    

    其中可以有多个条目具有相同的 modification_id 而且不同 category_filter_relation_id 我需要选择那些 category_filter_relations 项目。

    我的问题:

    SELECT cfr.id AS category_filter_relation_id, 
           cfr.modification_id,
    FROM category_filter_relations cfr
    WHERE 1
    AND cfr.modification_id = '18340300'
    AND category_filter_relation_id 
    IN (SELECT category_filter_relations_items.category_filter_relation_id 
        FROM category_filter_relations_items 
        WHERE category_filter_relations_items.modification_id = '18340300')
    

    这样我得到一个错误:

    “in/ALL/ANY子查询”中的未知列“category\u filter\u relation\u id”

    我也试着加入

    LEFT JOIN category_filter_relations_items ON (category_filter_relations_items.category_filter_relation_id = category_filter_relation_id)
    

    但这样我就可以从 category_filter_relations_items 表,我需要

    category_filter_relations where category_filter_relations.modification_id = 18340300
    

    加入

    category_filter_relations_items.category_filter_relation_id where category_filter_relations_items.modification_id = 18340300
    

    我需要的数据示例:

    category_filter_relations
    id    modification_id
    23796 18340300
    
    category_filter_relations_items 
    id      category_filter_relation_id  modification_id     
    54690   23270                        18340300
    

    id    modification_id
    23796 18340300
    23270 11111111
    

    因为category\u filter\u relations\u items.modification\u id等于18340300,所以它使用了id 23270

    1 回复  |  直到 6 年前
        1
  •  1
  •   Mickaël Leger    6 年前

    这是您的桌子:

    category_filter_relations
    =========================
    id |  modification_id
    

    category_filter_relations_items
    ===================================================
    id | modification_id | category_filter_relation_id
    

    在查询中,您可以:

    SELECT cfr.id AS category_filter_relation_id, -- You select the category_filter_relations id
           cfr.modification_id,                   -- You select the modification_id
    FROM category_filter_relations cfr            -- Both from the table category_filter_relations
    WHERE 1
    AND cfr.modification_id = '18340300'          -- You add a condition on the modification_id
    AND category_filter_relation_id               -- You add a condition on an id not in the table category_filter_relations
    IN (SELECT category_filter_relations_items.category_filter_relation_id 
        FROM category_filter_relations_items 
        WHERE category_filter_relations_items.modification_id = '18340300')
    

    您想要的输出是:

    id    modification_id
    23796 18340300
    23270 11111111
    

    AND cfr.modification_id = '18340300' ? modification_id = 11111111 如果你只要求 modification_id = '18340300' .

    所以试试这个:

    SELECT cfr.id, 
           cfr.modification_id,
    FROM category_filter_relations cfr
    WHERE cfr.modification_id = '18340300'
    
    UNION
    
    SELECT cfri.id, 
           cfri.modification_id,
    FROM category_filter_relations_items cfri
    INNER JOIN category_filter_relations cfr ON cfr.id = cfri.category_filter_relation_id
        AND cfr.modification_id = '18340300'
    

    category_filter_relations 具有列名 id (the) 身份证件 属于 modification_id (the) 修改\u id 属于 类别过滤关系 )因为这个条件,它等于'18340300'。

    UNION 现在我们将有专栏 身份证件 身份证件 在桌子上 category_filter_relations_items 还有一列 修改\u id 修改\u id 分类\筛选\关系\项目 哪里 category_filter_relation_id 身份证件 在桌子上 类别过滤关系 有哪些 modification_id = 18340300

    这是你要找的吗?