mysql选择id所在的位置(选择另一个表)

yyhrrdl8  于 2021-06-19  发布在  Mysql
关注(0)|答案(1)|浏览(316)

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

category_filter_relations

id   modification_id

其中我输入的修改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

xmq68pz9

xmq68pz91#

这是您的table:

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) idcategory_filter_relations )以及 modification_id (the) modification_idcategory_filter_relations )因为这个条件,它等于'18340300'。
这个 UNION 现在我们将有专栏 id 但现在是 id 在table上 category_filter_relations_items 还有一列 modification_id 那将是 modification_id 一行的 category_filter_relations_items 哪里 category_filter_relation_idid 在table上 category_filter_relations 有哪些 modification_id = 18340300 .
这是你要找的吗?

相关问题