MYSQL query using variable as table name in LEFT JOIN

后端 未结 2 1772
眼角桃花
眼角桃花 2020-12-06 11:29
SELECT var1,var2,var3,table_name 
FROM table1 LEFT JOIN table_name on var3=table_name.id

Meaning I want to dynamically left join table, depending o

相关标签:
2条回答
  • 2020-12-06 11:45

    Another way is to unite all tables with a union query:

    SELECT *, 44 as table_origin FROM `Table_44`
    UNION ALL
    SELECT *, 58 as table_origin FROM `Table_58`;
    

    You could even prepare that as view:

    CREATE VIEW `AllTheTables` AS
    SELECT *, 42 as table_origin FROM `Table_42`
    UNION ALL
    SELECT *, 44 as table_origin FROM `Table_44`
    UNION ALL
    SELECT *, 58 as table_origin FROM `Table_58`
    UNION ALL
    SELECT *, 69 as table_origin FROM `Table_69`;
    

    And thus query it safely:

    SELECT * FROM AllTheTables WHERE table_origin IN (44,58) AND something = 'foobar';
    -- or --
    SELECT * FROM AllTheTables WHERE table_origin = 42 AND something = 'the question';
    

    In your exact case it could look like this:

    SELECT var1, var2, var3, table_name 
    FROM table1 LEFT JOIN AllTheTables ON table1.var3=AllTheTables.table_origin
    
    0 讨论(0)
  • 2020-12-06 11:51

    Table names, as well as column names, can't be dynamic in an SQL query. So you have to apply your logic programmatically, using 2 queries, or with a stored procedure, see an example here: http://forums.mysql.com/read.php?98,126506,126598#msg-126598

    0 讨论(0)
提交回复
热议问题