AutomationFlowsData & Sheets › Merge MySQL & Postgres Data via Webhook

Merge MySQL & Postgres Data via Webhook

Original n8n title: Join Data From Postgres and Mysql

Join Data From Postgres And Mysql. Uses mySql, httpRequest, postgres. Webhook trigger; 6 nodes.

Webhook trigger★★★★☆ complexity6 nodesMySQLHTTP RequestPostgres
Data & Sheets Trigger: Webhook Nodes: 6 Complexity: ★★★★☆ Added:

This workflow follows the HTTP Request → Postgres recipe pattern — see all workflows that pair these two integrations.

The workflow JSON

Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →

Download .json
{
  "nodes": [
    {
      "name": "emitirEtiqueta",
      "type": "n8n-nodes-base.webhook",
      "position": [
        440,
        1290
      ],
      "parameters": {
        "path": "emitirEtiqueta",
        "options": {},
        "httpMethod": "POST",
        "responseData": "allEntries",
        "responseMode": "lastNode"
      },
      "typeVersion": 1
    },
    {
      "name": "dadosProduto",
      "type": "n8n-nodes-base.mySql",
      "position": [
        1270,
        1440
      ],
      "parameters": {
        "query": "=-- CONSULTA DO PRODUTO GRADE\nWITH pg as (\n\tSELECT\n\t\tid,\n\t\tid_produto,\n\t\tid_gradex,\n\t\tid_gradey,\n\t\tcodigo \n\tFROM\n\t\tproduto_grade \n\tWHERE\n\t\tid = '{{$node[\"emitirEtiqueta\"].json[\"body\"][\"id_produto_grade\"]}}'\n),\n\n-- CONSULTA DO PRODUTO\np as (\n\tSELECT * FROM produto \n\tWHERE id IN ( SELECT id_produto  FROM pg)\n\tAND situacao = 'ATIVO'\n),\n\n-- CONSULTA TECIDO\nt as (\n\tSELECT\n\t\ttoken,\n\t\t JSON_UNQUOTE(json_extract( objeto, '$.largura')) AS largura\n\tFROM\n\t\t`{{$node[\"PegarConfiguracaoImpressao\"].json[\"params\"][\"bancoRelatorio\"]}}`.`i_objeto` \n\tWHERE\n\t\tmodulo = 'produto_grade_tecido'\n\t\tand token in (select id from pg)\n\t\tand situacao = 'ATIVO'\n),\n\n\n-- CONSULTA COMPOSICAO\ncp as (\n\t\n\tSELECT\n\t  token,\n    group_concat(concat(cps.participacao,'% ',cps.descricao)) as composicao\n\tFROM\n\t\t`{{$node[\"PegarConfiguracaoImpressao\"].json[\"params\"][\"bancoRelatorio\"]}}`.`i_objeto`,\n\t\tJSON_TABLE (\n\t\t\t\t\t\t\t\t\tobjeto,\n\t\t\t\t\t\t\t\t\t\t\t'$[*]' COLUMNS (  \n\t\t\t\t\t\t\t\t\t\t\t\t\tparticipacao INT path '$.participacao',\n\t\t\t\t\t\t\t\t\t\t\t\t\tdescricao TEXT path '$.descricao'\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t) AS cps \n\t\tWHERE modulo = 'produto_grade_tecido_composicao'\n\t\tAND token in (select id from pg)\n\t\tAND situacao = 'ATIVO'\n\t\tAND cps.participacao > 0\n\t\tGROUP BY token\n\t\tORDER BY participacao desc\n\t\t\n)\n\n\n-- CONSULTA RELATORIO\nSELECT\n{{$node[\"emitirEtiqueta\"].json[\"body\"][\"id_movimentacao_detalhe\"]}} as id_movimentacao_detalhe ,\n     pg.id, \n\tpg.codigo,\n\tp.descricao,\n\tm.nome as marca,\n\tgx.nome as gradex,\n\tgy.nome as gradey,\n\tcurdate() as data_entrada,\n  t.largura,\n\tcp.composicao\nFROM\n\tpg inner join p on (p.id = pg.id_produto)\n\tinner join marca m on(m.id = p.id_marca)\n\tleft join grade gx on (gx.id = pg.id_gradex)\n\tleft join grade gy on (gy.id = pg.id_gradey)\n\tleft join t on (t.token = pg.id)\n\tleft join cp on (cp.token = pg.id)",
        "operation": "executeQuery"
      },
      "credentials": {
        "mySql": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "name": "PegarConfiguracaoImpressao",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        730,
        1290
      ],
      "parameters": {
        "url": "http://localhost:1337/parse/config",
        "options": {},
        "jsonParameters": true,
        "headerParametersJson": "{\"X-Parse-Application-Id\": \"iwms\"}"
      },
      "typeVersion": 1
    },
    {
      "name": "dadosRolo",
      "type": "n8n-nodes-base.postgres",
      "position": [
        1260,
        1220
      ],
      "parameters": {
        "query": "=select * from \"tecido_rolo\"\nwhere \"objectId\" in ('{{$json[\"idRolos\"].join(\"','\")}}')",
        "operation": "executeQuery",
        "additionalFields": {}
      },
      "credentials": {
        "postgres": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "name": "trataRetorno",
      "type": "n8n-nodes-base.function",
      "position": [
        1010,
        1220
      ],
      "parameters": {
        "functionCode": "// Code here will run only once, no matter how many input items there are.\n// More info and help: https://docs.n8n.io/nodes/n8n-nodes-base.function\n\n\n// var produto = items[0].json;\n\n\nvar rolos = $node[\"emitirEtiqueta\"].json[\"body\"][\"rolos\"];\n\n\nvar idRolos = rolos.map(\n    function(rolo){\n        return rolo.objectId\n    });\n    \nvar retorno = [];\n\nretorno.push({json:{\n   // produto:produto,\n    idRolos:idRolos \n}})\n\nreturn retorno;"
      },
      "typeVersion": 1
    },
    {
      "name": "roloProduto",
      "type": "n8n-nodes-base.merge",
      "position": [
        1640,
        1330
      ],
      "parameters": {
        "mode": "mergeByKey",
        "propertyName1": "id_movimentacao_detalhe",
        "propertyName2": "id_movimentacao_detalhe"
      },
      "typeVersion": 1
    }
  ],
  "connections": {
    "dadosRolo": {
      "main": [
        [
          {
            "node": "roloProduto",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "dadosProduto": {
      "main": [
        [
          {
            "node": "roloProduto",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "trataRetorno": {
      "main": [
        [
          {
            "node": "dadosRolo",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "emitirEtiqueta": {
      "main": [
        [
          {
            "node": "PegarConfiguracaoImpressao",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "PegarConfiguracaoImpressao": {
      "main": [
        [
          {
            "node": "dadosProduto",
            "type": "main",
            "index": 0
          },
          {
            "node": "trataRetorno",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}

Credentials you'll need

Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.

Pro

For the full experience including quality scoring and batch install features for each workflow upgrade to Pro

About this workflow

Join Data From Postgres And Mysql. Uses mySql, httpRequest, postgres. Webhook trigger; 6 nodes.

Source: https://github.com/Zie619/n8n-workflows — original creator credit. Request a take-down →

More Data & Sheets workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

Data & Sheets

query data from two different databases handle and unify in a single return

MySQL, HTTP Request, Postgres
Data & Sheets

BP_check. Uses googleSheets, @n-octo-n/n8n-nodes-json-database, httpRequest, itemLists. Webhook trigger; 99 nodes.

Google Sheets, @N Octo N/N8N Nodes Json Database, HTTP Request +2
Data & Sheets

v25.1.3. Uses httpRequest, mySql, n8n-nodes-zohozeptomail. Webhook trigger; 98 nodes.

HTTP Request, MySQL, N8N Nodes Zohozeptomail
Data & Sheets

Scraping. Uses httpRequest, postgres, @apify/n8n-nodes-apify, respondToWebhook. Webhook trigger; 61 nodes.

HTTP Request, Postgres, @Apify/N8N Nodes Apify
Data & Sheets

Workflow B — AI Listing Engine. Uses httpRequest, postgres, errorTrigger. Webhook trigger; 47 nodes.

HTTP Request, Postgres, Error Trigger