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

  • kshah008
    kshah008 Contributor

    Hi all,

     

    Can anybody help @ptran with their question?

    Thanks!

  • hrh514
    hrh514 Domo Employee

    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 support@domo.com.

     

     

     

  • kshah008
    kshah008 Contributor

    @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?
  • @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!

     

    Jacob Folsom
    **Say “Thanks” by clicking the “heart” in the post that helped you.
    **Please mark the post that solves your problem by clicking on "Accept as Solution"