用户可以通过文本框中的邮政编码(例如:L14,L15,L16)或位置进行搜索。
如果用户键入“ Liverpool”,它将找到位于“
Liverpool”的所有商店。如果用户输入邮政编码(例如:L15),它将搜索所有在L15邮政编码区域中交货的商店。
请参阅下表:
mysql> select * from shops;
+----+----------+-----------+----------+
| id | name | location | postcode |
+----+----------+-----------+----------+
| 1 | Shop One | Liverpool | L10 |
| 2 | Shop Two | Liverpool | L16 |
+----+----------+-----------+----------+
--
mysql> select * from shops_delivery_area;
+------------------+---------+----------+---------------+
| delivery_area_id | shop_id | postcode | delivery_cost |
+------------------+---------+----------+---------------+
| 1 | 1 | L10 | 1.50 |
| 2 | 1 | L11 | 0.00 |
| 3 | 1 | L12 | 1.00 |
| 4 | 1 | L13 | 1.00 |
| 5 | 2 | L10 | 2.50 |
| 6 | 2 | L16 | 0.00 |
| 7 | 2 | L28 | 0.00 |
+------------------+---------+----------+---------------+
SQL查询:
SELECT U.* FROM
((SELECT DISTINCT shops.*, DA.delivery_cost, DA.postcode AS AreaPostcode FROM shops
JOIN shops_delivery_area as DA on (DA.shop_id = shops.id)
WHERE DA.postcode = "Liverpool")
UNION
(SELECT DISTINCT shops.*, DA.delivery_cost, DA.postcode AS AreaPostcode FROM shops
JOIN shops_delivery_area as DA on
(DA.shop_id = shops.id AND
DA.postcode = shops.postcode)
WHERE shops.location = "Liverpool")) as U
--
结果-按位置(利物浦):
+----+----------+-----------+----------+---------------+--------------+
| id | name | location | postcode | delivery_cost | AreaPostcode |
+----+----------+-----------+----------+---------------+--------------+
| 1 | Shop One | Liverpool | L10 | 1.50 | L10 |
| 2 | Shop Two | Liverpool | L16 | 0.00 | L16 |
+----+----------+-----------+----------+---------------+--------------+
结果-按邮政编码(L12):
+----+----------+-----------+----------+---------------+--------------+
| id | name | location | postcode | delivery_cost | AreaPostcode |
+----+----------+-----------+----------+---------------+--------------+
| 1 | Shop One | Liverpool | L10 | 1.00 | L12 |
+----+----------+-----------+----------+---------------+--------------+
它似乎工作正常…是否还有其他方法可以缩短SQL查询的时间以避免union
或避免其他问题?
无论选择什么,请注意短代码并不总是最佳代码。在许多情况下,如果您的逻辑有足够的分歧,则合并结果确实是最佳的(有时甚至是最干净的编程方式)选项。
就是说,WHERE子句中的以下OR似乎涵盖了您的两种情况…
SELECT DISTINCT
shops.*,
DA.delivery_cost,
DA.postcode AS AreaPostcode
FROM
shops
INNER JOIN
shops_delivery_area as DA
ON (DA.shop_id = shops.id)
WHERE
(DA.postcode = "Liverpool")
OR
(DA.postcode = shops.postcode AND shops.location = "Liverpool")
问题内容: 今天,我遇到了一个有趣的SQL问题,尽管我想出了一个行之有效的解决方案,但我怀疑这是最佳还是最有效的答案。在这里,我请专家- 帮助我学习一些知识并改善查询条件!RDBMS是SQL Server 2008 R2,查询是SSRS报告的一部分,该报告将针对约100,000行运行。 本质上,我有一个ID列表,该ID可能具有多个与之关联的值,这些值是Yes,No或其他字符串。对于ID x,如果任
问题内容: 有没有一种方法可以改善这种SQL查询性能: 问题是当我的表中有许多数据(如百万行)时,子句的执行非常慢。我必须执行此验证,因为我无法插入重复的数据。 我使用SQLServer 2005 谢谢 问题答案: 确保您正在搜索索引列,而没有操纵这些列中的数据(例如子字符串等)
问题内容: 我正在使用SQL Server,并且我有两个表,我想合并为一个查询,用它来填充gridview。 表1 dbo.Work UID(PK,int) Tech_Ticket(int) RMA_Ticket(int) 区域(nchar10) 已完成(nchar10) FA(nchar10) 代理(nvarchar50) 跟踪(nvarchar50) Date_Added(date) Date
问题内容: 避免嵌套查询有多重要。 我一直学会避免像瘟疫一样躲避它们。但是对我来说,它们是最自然的事情。在设计查询时,我首先写的是嵌套查询。然后,我将其转换为联接,有时需要花费很多时间才能正确。而且很少会带来很大的性能提升(有时确实会提高) 他们真的那么糟糕吗?有没有一种方法可以使用没有临时表和文件排序的嵌套查询 问题答案: 这确实取决于我遇到的情况,我可以通过使用子查询来改进一些查询。 我知道的
国王、王后、鲁克、主教、骑士、卒: Piece:以上各部分的超类,共享功能如下所示 这里是我不喜欢的:我的Square类中有一个名为“board”的字段,这样我就可以引用给定的Square所属的board。我不喜欢这个设计,因为它会导致克隆的问题。 我是否应该将这个方法移到Board类中,这样我就可以访问Board对象,而不必从Square到Board? 我很感激你的想法bclayman
如何通过@JmsListener仅更改一种方法的默认并发?我已将并发添加到@JmsListener(如下所示),但“JBoss管理控制台运行时JMS队列指标”中没有任何更改。我有JBoss 6.4,Spring JMS版本4.3.1。发布。 我的听众: 我的默认配置: