I'm pretty sure you can't do this without Javascript - this code did something similar - for a booking onto an event it would warn the user if they had already booked onto it:
// add booking view 132
// account field 149
// event field 151
 
$(document).on('knack-view-render.view_132', function (event, view, data) {
$('#' + view.key + '-field_151').chosen().change(function() {
console.log('triggered');
      check_duplicate();
});
  
    $('<div class="kn-message error" id="duplicate_alert"></div>')
        .insertAfter($('#kn-input-field_151'))
        .hide();
 
function check_duplicate () {
        var bookingFilters = [
          {
            'field':'field_149',
            'operator':'is',
            'value':$('#'+ view.key + '-field_149').val()
          },
          {
            'field':'field_151',
            'operator':'is',
            'value':$('#'+ view.key + '-field_151').val()
          }          
        ];
        Knack.showSpinner();
        $.ajax({
          url: fullUrl,
          async: false,
          type: 'GET',
          headers: {'X-Knack-Application-Id': '5ac608865b4eec1f69cacbdb', 'X-Knack-REST-API-Key': '16e94820-38c5-11e8-a291-33529755c0c2'}
        }).done(function(data) {
          // Make sure we have no duplicate records
          if (data.records.length !== 0) {
            Knack.hideSpinner();
            $('#duplicate_alert').html($('<p><strong>You had already booked onto that event - please select another! </p></strong>')).show();
            $('#view_132-field_151').val([]).trigger('liszt:updated');
          }
          else
          {
          $('#duplicate_alert').hide();
            Knack.hideSpinner();
          }
        }
)}
});
 
Horrendously complicated for something so simple but I hope it helps nonetheless!