User-defined variables in SQL queries/transformation

Is it possible to create user-defined variables in the SQL queries/transformation?

 

For example

@set bob='Bob'

select * from table1 where name=@bob

UNION ALL

select * from table2 where name=@bob

...etc tableN

Comments

  • Hi all,

     

    Can anybody help @ptran with their question?

    Thanks!

  • Yes, it is possible to create these variables within a MySQL data flow. The syntax however would be slightly different. You would want to use @bob:=Bob and then when referencing it within your select statement use @bob. If you experience any problems implementing this in a data flow, please feel free to email Domo Support at [email protected].

     

     

     

  • @ptran, did hrh514's response help answer your question?

  • Not sure I understand.

     

    SET @bob:='bob';
    SELECT * FROM table WHERE name=@bob;

    I will follow-up with support, but for completeness, the above SQL gives the following error "SQL statement must be a SELECT clause if "Generate Output Table" is selected."

  • @ptran, where you able to figure out how to do this?
  • DataJake
    DataJake

    domo

    💎

    @ptran,

     

    In my experience, you can't set user defined variables like a typical MySQL script with a SET statement upfront, but you can initialize them inline in a subquery and then reference in an outer select statement. For example, the statement below will initialize @row = 0  and increment +1 for each row in the select statement.

     

     

    SELECT mydata.*,@row := @row + 1 as `RowNumber`
    FROM mydata, (SELECT @row := 0) r;

     

     

    Technically, you could declare a variable such as @Bob in your statement and then filter on that value, like this:

     

    SELECT name
    FROM sample_table, (select @Bob := 'Bob') r on name = @Bob


    But that would defeat the purpose of declaring a variable and referencing it in many statements, like you indicated with your UNION approach, so I would suggest another approach:

     

    Step 1: Create a lookup table to store your values. This could be a webform, or a select statement to generate the columns and values in the first transform step. 

    Step 2: Join your transaction tables to the lookup table to filter on the specified values

     

    Hope this helps!