Я создаю действительно сложный динамический sql, он должен возвращать одну строку для каждого пользователя, но теперь мне нужно объединиться с таблицей «один ко многим». Я делаю внешнее соединение, чтобы убедиться, что я верну хотя бы одну строку (и могу проверить нуль, чтобы увидеть, есть ли данные в этой таблице), но я должен убедиться, что я получаю только одну строку из этой части внешнего соединения, если есть несколько строки в этой второй таблице для этого пользователя. До сих пор я придумал это: (sybase)
SELECT a.user_id
FROM table1 a
,table2 b
WHERE a.user_id = b.user_id
AND a.sub_id = (
SELECT min(c.sub_id)
FROM table2 c
WHERE b.sub_id = c.sub_id
)
Подзапрос находит минимальное значение в таблице «один ко многим» для этого конкретного пользователя.
Это работает, но я опасаюсь неприятностей при выполнении коррелированных подзапросов, когда таблицы 1 и 2 становятся очень большими. Есть ли способ лучше? Я пытаюсь придумать способ заставить соединения делать это, но я этого не вижу. Также слова «где rowcount = 1» или «top 1» мне не помогают, потому что я не пытаюсь исправить вышеуказанный запрос, я ДОБАВЛЯЮ его к уже сложному запросу.