Вы можете сделать это с помощью выражения CASE:
SELECT *
FROM table1
INNER JOIN table2 ON table2.id = CASE
WHEN (A > B) THEN table1.id
WHEN (A < B) THEN table1.somethingElse
END
Обратите внимание, что этот запрос все еще может использовать индекс для table2(id)
.
Также возможно использование вложенных IF()
функций:
SELECT *
FROM table1
INNER JOIN table2 ON
table2.id = IF(A > B, table1.id, IF(A < B, table1.somethingElse, NULL))
Но это не очень читабельно.
Также обратите внимание, что в обоих запросах совпадения не будет, если A = B
. Но это то, что предлагает ваш «псевдокод».