【发布时间】:2009-09-29 15:56:46
【问题描述】:
我正在使用以下查询返回至少有 2 个条件匹配的所有记录 (provided by Quassnoi)。
SELECT *
FROM (
SELECT ContentID
FROM (
SELECT ContentID
FROM VWTenantPropertiesResults
WHERE ContentStreet = 'Holderness Road'
UNION ALL
SELECT ContentID
FROM VWTenantPropertiesResults
WHERE ContentTown = 'Hull'
UNION ALL
SELECT ContentID
FROM VWTenantPropertiesResults
WHERE ContentPostCode = 'HU'
) qi
GROUP BY
ContentID
HAVING COUNT(*) >= 2
) q
JOIN VWTenantPropertiesResults r
ON r.ContentID = q.ContentID
WHERE ContentBedrooms BETWEEN 1 AND 4
AND ContentPrice BETWEEN 50 AND 500
ORDER BY
ContentPrice
问题在于,在搜索 Street and Town(返回所有与请求的街道和城镇匹配的属性)时,它似乎有效,但在搜索 Street 和 Postcode(不返回任何结果)时无效。为了让 Street 和 Postcode 的搜索工作(返回结果),我必须删除以下行;
UNION ALL
SELECT id
FROM VWTenantPropertiesResults
WHERE ContentTown = 'Hull'
但是显然城镇和邮政编码或城镇和街道搜索不起作用,因为我已经删除了上述 4 行以使街道和邮政编码搜索起作用。
我想知道是否有人可以提供一些帮助?
谢谢。
【问题讨论】:
-
如何搜索街道和邮政编码?
-
这个 UNION + HAVING 的意义何在?为什么不选择 DISTINCT ... WHERE (Street = X AND Town = Y) OR (Street = X AND PostCode = Z) OR (Town = Y AND PostCode = Z)?
-
您的 ContentPostCode 字段的类型是什么?
-
请向我们展示您的数据集和架构。
-
大家好,很抱歉未能尽快回复。我在页面中有一个表单,允许用户输入街道、城镇和邮政编码。 Quassnoi 向我提供了代码,以便通过匹配 2 个或更多条件来返回更准确的搜索结果。但是,当我搜索特定街道和邮政编码时 - 结果显示甚至不在该街道上的记录。我认为拥有匹配 2 个或更多条件将使我只能返回该街道或邮政编码上的属性。相反,它只是返回具有邮政编码 HU 的所有内容。
标签: sql sql-server tsql asp-classic