Я использую базу данных PostgreSQL и имею 4 таблицы для работы: реестр, счет-фактура, invoice_position, user_involved
Столбцы реестра таблицы:
id
reg_name
Счет-фактура таблицы:
id
reg_id(FK to registry, can be many invoices in one registry)
invoice_name
Таблица invoice_position:
id
invoice_id(FK to invoice, can be many positions in invoice)
position_name
Таблица user_involved:
id
Inv_position_id(FK to invoice_position, it's a one to one relationship)
user_name
Мне нужно создать запрос SELECT, который найдет, если существует более одного вхожденияиз user_involved в таблице registry (которая связана только с user_involved FK из invoice_position-> invoice-> registry).Несколько вещей, на которые стоит обратить внимание, что эти таблицы содержат более +/- 1.000.000 строк в каждой (за исключением таблицы реестра), и я не могу сейчас добавить прямую связь между реестром и user_involved.Вопрос в том, как написать оптимальный SELECT или, если это вообще возможно, в этом состоянии, потому что вложение нескольких SELECT будет длиться вечно.
РЕДАКТИРОВАТЬ: Это то, что я пробовал до сих пор:
SELECT rg.id, COUNT(ui.id) FROM registry rg
LEFT JOIN invoice inv ON inv.reg_id = rg.id
LEFT JOIN invoice_position ip ON ip.invoice_id = inv.id
LEFT JOIN user_involved ui ON ui.inv_position_id = ip.id
WHERE ip.id = $id GROUP BY rg.id,ui.id HAVING COUNT (ui.id) > 1;
Этот запрос будет внутри цикла , в то время как с переменной "id", учитывая разные идентификаторы позиции счета.