То, как я решаю, когда использовать право, присоединяется/оставляет к соединениям или внутренним объединениям Или как определить, какая таблица включена который сторона?

Я знаю использование соединений, но иногда я сталкиваюсь с такой ситуацией, когда я не могу решить, какое соединение подойдет, левое или правое.

Вот запрос, где я застреваю.

    SELECT  count(ImageId) as [IndividualRemaining],
                userMaster.empName AS ID#,
                CONVERT(DATETIME, folderDetails.folderName, 101) AS FolderDate,
                batchDetails.batchName AS Batch#,
                Client=@ClientName,
                TotalInloaded = IsNull(@TotalInloaded,0),
                PendingUnassigned = @PendingUnassigned,
                InloadedAssigned =     IsNull(@TotalAssigned,0),
                TotalProcessed = @TotalProcessed,
                Remaining = @Remaining
        FROM
                batchDetails
                    Left JOIN  folderDetails ON batchDetails.folderId = folderDetails.folderId
                    Left JOIN  imageDetails ON batchDetails.batchId = imageDetails.batchId
                    Left JOIN  userMaster ON imageDetails.assignedToUser = userMaster.userId

        WHERE   folderDetails.ClientId =@ClientID and verifyflag='n'
                and folderDetails.FolderName IN (SELECT convert(VARCHAR,Value) FROM dbo.Split(@Output,','))
                and userMaster.empName <> 'unused'

        GROUP BY userMaster.empName, folderDetails.folderName, batchDetails.batchName

        Order BY folderDetails.Foldername asc
38
задан Pranay Rana 15 January 2013 в 19:24
поделиться

2 ответа

Да, это зависит от ситуации, в которой вы находитесь.

Зачем использовать SQL JOIN?

Ответ : Используйте SQL JOIN всякий раз, когда необходимо получить доступ к нескольким таблицам через SQL SELECT, и результаты не должны возвращаться, если между JOINed таблицами нет совпадения.

Чтение этой исходной статьи о The Code Project вам очень поможет: Визуальное представление соединений SQL .

alt text

Также проверьте это сообщение: SQL-СЕРВЕР - Повышение производительности - СЛЕВА ПРИСОЕДИНЯТЬСЯ или НЕ ВХОДИТЬ? .

Оригинал можно найти по адресу: Разница между СОЕДИНЕНИЕМ и ВНЕШНИМ СОЕДИНЕНИЕМ в MySQL .

109
ответ дан 27 November 2019 в 03:04
поделиться

Я думаю, что вы ищете, чтобы сделать LEFT JOIN, начиная с главной таблицы, чтобы вернуть все записи из главной таблицы, независимо от того, имеют ли они действительные данные в объединенных таблицах (как указано в верхних левых 2 кругах на графике)

JOIN'ы происходят последовательно, поэтому если у вас есть 4 таблицы, которые нужно соединить, и вы всегда хотите получить все записи из вашей главной таблицы, вам нужно продолжать LEFT JOIN на протяжении всего времени, например:

SELECT * FROM main_table
LEFT JOIN sub_table ON main_table.ID = sub_table.main_table_ID
LEFT JOIN sub_sub_table on main_table.ID = sub_sub_table.main_table_ID

Если вы INNER JOIN под_таблицу, это немедленно уменьшит ваш набор результатов, даже если вы сделали LEFT JOIN на под_таблице.

Помните, что при выполнении LEFT JOIN, вам нужно учитывать, что возвращаются NULL значения. Потому что если ни одна запись не может быть объединена с основной_таблицей, LEFT JOIN заставит это поле появиться независимо и будет содержать NULL. INNER JOIN, очевидно, просто "выбросит" строку, потому что между ними нет действительной связи (нет соответствующей записи на основе ID, которые вы объединили)

Однако вы упомянули, что у вас есть оператор where, который отфильтровывает строки, которые вы ищете, поэтому ваш вопрос о JOIN'ах недействителен, потому что это не ваша настоящая проблема. (Это если я правильно понял ваши комментарии)

5
ответ дан 27 November 2019 в 03:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: