У меня есть таблица "Таблица A", которая имеет два значения ("пользователь" и "оценщик"), которые используются в качестве идентификаторов для данных в другой таблице "Таблица B". В "Таблице B" любой существующий пользователь является оценщиком, он может оценивать других.
Поскольку ссылка "пользователь" и "эксперт" ссылается на одну и ту же таблицу, я не могу выполнить поиск в таблице B, если я хочу одновременно фильтровать пользователя и оценщика, ниже приведен пример того, что я имею в виду:
select 'tableA'.*
from 'tableA'
left join 'tableB' on 'tableA'.'user_id' = 'tableB'.'id'
left join 'tableB' on 'tableA'.'assessor_id' = 'tableB'.'id'
where LOWER(tableB.first_name) REGEXP "John" # user name
AND LOWER(tableB.first_name) REGEXP "Bill" # assessor name
Есть ли быстрый способ обойти эту проблему или мне придется создать отдельную таблицу специально для оценщиков или как клонировать существующую таблицу пользователей?
Вы присоединяетесь к одной таблице для другого сопоставления, используйте псевдоним таблицы, чтобы различать таблицу соединения
SELECT 'tableA'.* FROM 'tableA' AS TA
LEFT JOIN 'tableB' AS TB1 ON TB1.id = TA.'user_id'
LEFT JOIN 'tableB' AS TB2 ON TB2.id = TA.'assessor_id'
WHERE
LOWER(TB1.first_name) REGEXP "John" -- user name
AND
LOWER(TB2.first_name) REGEXP "Bill" -- assessor name