diff --git a/src/gui/qgsquerybuilder.cpp b/src/gui/qgsquerybuilder.cpp
index 03965f201e50..aa80e22272d2 100644
--- a/src/gui/qgsquerybuilder.cpp
+++ b/src/gui/qgsquerybuilder.cpp
@@ -93,7 +93,34 @@ QgsQueryBuilder::QgsQueryBuilder( QgsVectorLayer *layer,
connect( layer, &QgsVectorLayer::subsetStringChanged, this, &QgsQueryBuilder::layerSubsetStringChanged );
layerSubsetStringChanged();
- lblDataUri->setText( tr( "Set provider filter on %1" ).arg( layer->name() ) );
+ QString subsetStringDialect;
+ QString subsetStringHelpUrl;
+
+ if ( QgsDataProvider *provider = layer->dataProvider() )
+ {
+ lblDataUri->setText( tr( "Set provider filter on %1 (provider: %2)" ).arg( layer->name(), provider->name() ) );
+ subsetStringDialect = provider->subsetStringDialect();
+ subsetStringHelpUrl = provider->subsetStringHelpUrl();
+ }
+ else
+ {
+ lblDataUri->setText( tr( "Set provider filter on %1 (provider: %2)" ).arg( layer->name(), layer->providerType() ) );
+ }
+
+ if ( !subsetStringDialect.isEmpty() && !subsetStringHelpUrl.isEmpty() )
+ {
+ lblProviderFilterInfo->setOpenExternalLinks( true );
+ lblProviderFilterInfo->setText( tr( "Enter a %2 to filter the layer" ).arg( subsetStringHelpUrl ).arg( subsetStringDialect ) ) ;
+ }
+ else if ( !subsetStringDialect.isEmpty() )
+ {
+ lblProviderFilterInfo->setText( tr( "Enter a %1 to filter the layer" ).arg( subsetStringDialect ) ) ;
+ }
+ else
+ {
+ lblProviderFilterInfo->hide();
+ }
+
mTxtSql->setText( mOrigSubsetString );
mFilterLineEdit->setShowSearchIcon( true );
diff --git a/src/ui/qgsquerybuilderbase.ui b/src/ui/qgsquerybuilderbase.ui
index df0249bbd96a..c8a5217d9402 100644
--- a/src/ui/qgsquerybuilderbase.ui
+++ b/src/ui/qgsquerybuilderbase.ui
@@ -322,9 +322,16 @@ p, li { white-space: pre-wrap; }
11
- -
+
-
+ -
+
+
+ Provider expression dialect
+
+
+