В MySQL я хочу SELECT A.* FROM A
где внутреннее соединение условие выполняется ли непосредственно (присоединение таблицы B
) или через другую таблицу соединения (C
), WHERE B.field = myvalue
. Может ли кто-нибудь указать правильный способ получить результаты?Mysql внутреннее соединение дважды и использовать WHERE на обоих присоединяется
У меня есть следующие таблицы: A, B, C, которые связаны следующим образом (A присоединяется к B, B присоединяется C, A присоединяется C):
B
/ \
A --- C
Это выглядит довольно просто, но я получаю пустое множество, когда я запускаю следующий код, даже если я получаю результаты, когда я ограничить поиск только присоединение B через C:
SELECT A.* FROM A
INNER JOIN C ON C.id = A.c_id
INNER JOIN B AS B_thru_C ON B_thru_C.id = C.b_id
INNER JOIN B AS B_from_A ON B_from_A.id = A.b_id
WHERE B_thru_C.field = 'myvalue' OR B_from_A.field = 'myvalue';
# yields an empty set
SELECT A.* FROM A
INNER JOIN C ON C.id = A.c_id
INNER JOIN B AS B_thru_C ON B_thru_C.id = C.b_id
WHERE B_thru_C.field = 'myvalue';
# yields results
Должен ли запрос возвращать записи из набора A, даже если нет успешного соединения с B или C? Или он должен также устранить их в этом сценарии? –