*更新*
抱歉!我有点忙,匆忙,所以没有正确清理它。
基本上,3个问题都与用户细节有关。我正在为新客户端更新站点,我受当前数据库结构的限制。因此,我的目标是尝试在一个db calll而不是3个单独的calll中获取所有这些信息,因为这似乎是两者中最有效的方式。
我希望比我聪明的人可能知道一些忍者动作可以一次性找回这个。在发布之前我真的应该花更多的时间自己尝试一下。
感谢您的时间。
公共值是@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
答案 0 :(得分:5)
您不能/不应该将它们合并。
您正在从所有3中的不同表中选择非常不同的数据。看起来它们完全不相关。您期望“组合”结果集看起来像什么?您正在整理书籍,飞机和电话信息吗?
你的目标究竟是什么?如果你告诉我们,我们可以给你一个不同的(正确的)路径。
答案 1 :(得分:1)
我只是在这里做推断,但你要么...... 1.只是想让代码更简洁 2.希望输出具有同意签名(相同字段等)。
如果是1.
,我会保留您的代码。每个查询都是不同的,并使用IF语句将它们分开,这使得它可读并且显而易见,有三个执行路径。
对于自动化部分程序员工作的数据绑定框架,通常需要后者。如果是这种情况,我仍然会将代码留给IF语句。如果你然后显式地将每个字段CAST到相同的类型(例如INT,或VARCHAR(256)等),然后确保每次都使用相同的字段名称(例如ID或Name等),那么你将为每个执行路径获取相同的签名。
修改强>
我仍然不完全确定你想要达到的目标,更具体地说,你所面临的问题。
如果您只是尝试执行一次数据库调用,并获取三组数据,则使用3 SELECT
语句创建存储过程就可以完成此操作。根据您访问数据库的方式,您应该能够通过三个记录集进行迭代。
所以,我怀疑你面临的问题根本不是SQL相关的,而是在你的应用程序中。你用的是哪种语言?你目前如何访问记录集?当SP返回3个记录集时,您面临哪些问题?等等...