Объедините 3 SQL SELECT в 1 - PullRequest
1 голос
/ 13 апреля 2011

* ОБНОВЛЕНИЕ *

Извините!Я был немного занят и спешил, поэтому не все выяснил правильно.

По сути, все 3 очереди связаны с деталями пользователей.Я обновляю сайт для нового клиента, где я ограничен текущей структурой базы данных.Поэтому моя цель состоит в том, чтобы попытаться получить всю эту информацию в одном вызове базы данных, а не в трех отдельных, так как это может показаться наиболее эффективным способом из двух.

Я надеялся, что кто-то умнее меня сможетзнать о некоторых движениях ниндзя, которые могут получить это за один раз.Я действительно должен был потратить больше времени, пытаясь сделать это сам, прежде чем отправлять сообщения.

Спасибо за ваше время.


Общее значение - @dealerId - значение int.

Спасибо

    SELECT TOP(100) PERCENT dbo.ReferenceItems.Title 
    FROM dbo.AdvertiserLanguageLink 
    INNER JOIN dbo.ReferenceItems 
    ON dbo.AdvertiserLanguageLink.LanguageId = dbo.ReferenceItems.Id
    WHERE (dbo.AdvertiserLanguageLink.AdvertiserId = @dealerId) 
    ORDER BY dbo.ReferenceItems.Title



    SELECT TOP (100) PERCENT dbo.AircraftTypes.AircraftTypeDescription, dbo.AircraftTypes.AircraftTypeId 
    FROM dbo.AdvertiserAircraftTypeLink 
    INNER JOIN dbo.AircraftTypes 
    ON dbo.AdvertiserAircraftTypeLink.AircraftTypeId = dbo.AircraftTypes.AircraftTypeId 
    WHERE (dbo.AdvertiserAircraftTypeLink.AdvertiserId = @dealerId) 
    ORDER BY dbo.AircraftTypes.SortSequence



    SELECT TOP (1) dbo.Addresses.Country, dbo.Addresses.Telephone1 
    FROM dbo.AdvertiserAddressLink 
    INNER JOIN dbo.Addresses 
    ON dbo.AdvertiserAddressLink.AddressId = dbo.Addresses.Id 
    WHERE (dbo.AdvertiserAddressLink.AdvertiserId = @dealerId) 
    AND (dbo.Addresses.AddressType = 1 OR dbo.Addresses.AddressType = 0) 
    ORDER BY dbo.Addresses.Sequence

Ответы [ 2 ]

5 голосов
/ 13 апреля 2011

Вы не можете / не должны их объединять.

Вы выбираете очень разные данные из разных таблиц во всех 3. Похоже, они совершенно не связаны. Как вы ожидаете, что «комбинированный» набор результатов будет выглядеть? Вы объединяете информацию о книгах, самолетах и ​​телефонах?

Какова ваша цель? Если вы скажете нам, что мы можем дать вам другой (правильный) путь к нему.

1 голос
/ 13 апреля 2011

Я просто делаю вывод, но вы тоже ...
1. Просто хочу сделать код более лаконичным.
2. Хотите, чтобы выходные данные имели подпись участника (те же поля и т. Д.).

В случае 1. я бы оставил ваш код как есть. Каждый запрос отличается, и разделение их с помощью операторов IF делает читаемым и очевидным, что существует три пути выполнения.

Последнее часто требуется в случае систем привязки данных, которые автоматизируют часть работы программистов. Если это так, я бы все равно оставил код с инструкциями IF. Если вы затем явно CAST каждого поля одного и того же типа (например, INT или VARCHAR (256) и т. Д.), А затем убедитесь, что одни и те же имена полей используются каждый раз (например, ID или имя и т. Д.), То вы будете получить одинаковую подпись для каждого пути выполнения.

EDIT:

Я все еще не совсем уверен относительно того, чего вы хотите достичь и, более конкретно, с какими проблемами вы сталкиваетесь.

Если вы просто пытаетесь выполнить один вызов БД и получить обратно три набора данных, то наличие хранимой процедуры с вашими 3 SELECT инструкциями сделает именно это. В зависимости от того, как вы обращаетесь к базе данных, вы сможете использовать ее для трех наборов записей.

Итак, я подозреваю, что проблемы, с которыми вы сталкиваетесь, связаны не с SQL, а с вашим приложением. Какой язык вы используете? Как вы в настоящее время обращаетесь к набору записей? С какими проблемами вы сталкиваетесь, когда SP возвращает 3 набора записей? И т. Д., И т. Д. *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...