返回也具有IN语句的派生表名的所有记录

时间:2018-06-18 14:44:51

标签: mysql derived-table

我正在尝试从我的数据库中检索单个记录,但是在查询另一条记录之前,我不知道要查询哪个表名。

如果我知道表名和ID,那么结束查询将会是这样的。

SELECT * FROM `materials_sheet_stock` WHERE `id` = 2

但是因为我不知道该表中的表名或ID,所以我试图将其分解一下。

此查询将成功检索上述查询的表名

SELECT tb1.* 
FROM (SELECT `tag_table` 
    FROM `materials_group_tags_mapping` 
    WHERE `tag_id` IN 
        (SELECT `materials_group_tags`.`id` 
         FROM `materials_group_tags` 
         WHERE `materials_group_tags`.`name` = "frameless_base_side_material_unexposed")) AS tb1

在这种情况下是materials_sheet_stock

此查询将成功检索上述查询所需的ID

(SELECT `materials_group_tags_mapping`.`tag_value` 
FROM `materials_group_tags_mapping` 
WHERE `materials_group_tags_mapping`.`tag_id` IN 
    (SELECT `materials_group_tags`.`id` 
    FROM `materials_group_tags` 
    WHERE `materials_group_tags`.`name` = "frameless_base_side_material_unexposed"))

但是现在当我使用IN将它们全部放在1个查询中时,它会不停地抛出关于找不到列的错误,或者所有表都需要别名。我已经尝试编辑以下代码一小时没有运气。希望你们能发现错误。这是我正在使用的最终代码。

SELECT tb2.* 
FROM (SELECT `tag_table` 
    FROM `materials_group_tags_mapping` 
    WHERE `tag_id` IN 
        (SELECT `materials_group_tags`.`id` 
        FROM `materials_group_tags` 
        WHERE `materials_group_tags`.`name` = "frameless_base_side_material_unexposed") ) as tb2 
        WHERE tb2.`id` IN 
            (SELECT `materials_group_tags_mapping`.`tag_value` 
            FROM `materials_group_tags_mapping` 
            WHERE `materials_group_tags_mapping`.`tag_id` IN 
                (SELECT `materials_group_tags`.`id` 
                FROM `materials_group_tags` 
                WHERE `materials_group_tags`.`name` = "frameless_base_side_material_unexposed"))

0 个答案:

没有答案