ВЫБЕРИТЕ СОЕДИНЕНИЕ с условным (ИЛИ) крестиком - PullRequest
0 голосов
/ 14 февраля 2019

Мне нужно сделать что-то подобное (в MySQL), мои попытки использовать UNION не будут работать до сих пор.

Теоретически:

SELECT * FROM
tableA A

JOIN tableB B ON A.tableAId = B.tableAId

LEFT JOIN tableC C ON C.tableAId = A.tableAId

LEFT JOIN tableD D ON D.tableAId = A.tableAId

JOIN tableE E
ON (C.tableEId = E.tableEId OR D.tableEId = E.tableEId)

Ожидаемый результат - пересечение Aс B, необязательный C с A, необязательный D с A и получить результат E, если его идентификатор на C или D.

Чтобы узнать, найдена ли запись из C или D, я используюпроверка IF, если tableCId или tableDId равны нулю.

1 Ответ

0 голосов
/ 14 февраля 2019

Я думаю, ваш код будет работать.

SELECT *
FROM tableA A JOIN
     tableB B
     ON A.tableAId = B.tableAId LEFT JOIN
     tableC C
     ON C.tableAId = A.tableAId LEFT JOIN 
     tableD D
     ON D.tableAId = A.tableAId JOIN
     tableE E
     ON E.tableEId IN (C.tableEId, D.tableEId);

Это отфильтрует строки, у которых нет совпадений в C и D, а также те, чьи совпадения в C / D не в E. Я предполагаюэто желательно.

Кроме того, OR и IN могут оказать плохое влияние на производительность JOIN, но вы не упоминаете производительность как проблему.

...