Archive

Archive

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

Welcome!

It looks like you're new here. Members get access to exclusive content, events, rewards, and more. Sign in or register to get started.
Sign In

Comments

  • Contributor

    Hi all,

     

    Can anybody help @ptran with their question?

    Thanks!

  • 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.

     

     

     

  • Contributor

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

  • Not sure I understand.

     

    1. 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?
  • Domo Employee

    @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.

     

     

    1. 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:

     

    1. 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"

Welcome!

It looks like you're new here. Members get access to exclusive content, events, rewards, and more. Sign in or register to get started.
Sign In