Я предполагаю, что вы пытаетесь условно вернуть набор результатов на основе той таблицы, которая имеет наибольшее количество записей для предоставленного значения.
Если мое предположение верно, вы можете попробовать следующий подход: ( выполняется в SSMS)
-- Mock-up of Table1.
DECLARE @Table1 TABLE ( A INT, col2 VARCHAR(10), col3 VARCHAR(10) );
INSERT INTO @Table1 VALUES
( 123, 'xxxx', 'xxyy' ), ( 234, 'ysx', 'ddd' );
-- Mock-up of Table2.
DECLARE @Table2 TABLE ( A INT, B INT, col3 VARCHAR(10), col4 VARCHAR(10) );
INSERT INTO @Table2 ( A, B, col3, col4 ) VALUES
( 123, 321, 'xx', 'yy' ), ( 123, 567, 'fdfdh', 'fjfj' ), ( 456, 123, 'dhfdh', 'dsgds' );
-- Query value.
DECLARE @qVal INT = 123;
-- Select data from which ever table has the greater record count of @qVal...
IF ( ( SELECT COUNT ( * ) FROM @Table1 WHERE A = @qVal ) > ( SELECT COUNT ( * ) FROM @Table2 WHERE A = @qVal OR B = @qVal ) ) BEGIN
-- Table1 has the greater record count, select data from here.
SELECT * FROM @Table1 WHERE A = @qVal;
END
ELSE BEGIN
-- Table2 has the greater record count, select data from here.
SELECT * FROM @Table2 WHERE A = @qVal OR B = @qVal;
END
Запуск для @qVal
из 123 возвращает:
+-----+-----+-------+-------+
| A | B | col3 | col4 |
+-----+-----+-------+-------+
| 123 | 321 | xx | yy |
| 123 | 567 | fdfdh | fjfj |
| 456 | 123 | dhfdh | dsgds |
+-----+-----+-------+-------+
В то время как выполняется для @qVal
из 234 возвращает:
+-----+------+------+
| A | col2 | col3 |
+-----+------+------+
| 234 | ysx | ddd |
+-----+------+------+
Примечание : с учетом структуры if / else, запуск для несуществующего @qVal всегда будет возвращать пустой набор результатов из Table2.
Например, @qVal = 0
возвращает:
+---+---+------+------+
| A | B | col3 | col4 |
+---+---+------+------+
Конечно, все это основано на моем предположении о вашей реальной потребности.