【问题标题】:mySQL query using join使用连接的 mySQL 查询
【发布时间】:2011-07-20 22:59:15
【问题描述】:

我有 2 张桌子 - 'cityname' 和 'citymoisture'。

'cityname' has 2 columns:  
-city_ID <- integer and primary key that increments automatically  
-city_full_name <- character name i.e. boston, toronto, new york city etc...  

'citymoisture' has 7 columns:  
-city_ID <- tied to the city_ID field via a Foreign Key  
-date  
-time  
-open  
-high  
-low  
-close  

我想做的是-

通过指定城市名称和日期范围查询湿度表中的任何开、高、低和收盘。

以下查询有效:

USE moisturedb  
SELECT citymoisture.date, citymoisture.time, citymoisture.close  
FROM citymoisture  
WHERE (citymoisture.date BETWEEN '2011/03/09' AND '2011/03/14') AND citymoisture.city_id=5;

但这仅引用了“citymoisture”表。我有一个允许用户选择城市名称的前端应用程序,因此从某种意义上说,我想运行一个联合查询,该查询根据 cityname 表中的 city_full_name 列删除结果。

我已经修改了一些连接查询但没有成功。在过去的几个小时里,我也一直在搜索连接查询示例,但没有成功。

非常感谢您的帮助。

作为 Nikhil 请求的后续行动,此处提供了所建议查询的示例输出。

| 2011-03-10   | 03:38:00     | 0.918 |
| 2011-03-10   | 03:39:00     | 0.897 |
| 2011-03-10   | 03:40:00     | 0.917 |
| 2011-03-10   | 03:41:00     | 0.915 |
| 2011-03-10   | 03:42:00     | 0.914 |
| 2011-03-10   | 03:43:00     | 0.924 |
| 2011-03-10   | 03:44:00     | 0.922 |
| 2011-03-10   | 03:45:00     | 0.922 |
| 2011-03-10   | 03:46:00     | 0.923 |
| 2011-03-10   | 03:47:00     | 0.935 |
| 2011-03-10   | 03:48:00     | 0.953 |
| 2011-03-10   | 03:49:00     | 0.927 |  
| 2011-03-10   | 03:50:00     | 0.962 |  
| 2011-03-10   | 03:51:00     | 0.914 |  
| 2011-03-10   | 03:52:00     | 0.935 |  
+--------------+--------------+-------+  
14770 rows in set (2 min 28.80 sec)  

第 3 列是水分数据。查询中每个城市的值在它们一个接一个堆叠的意义上被编织在一起。我非常喜欢以下输出,其中每个城市的水分数据出现在单独的列中:

2011-03-10  03:49:00  0.935  0.935  0.935  .....  
2011-03-10  03:50:00  0.935  0.935  0.935  .....  
2011-03-10  03:51:00  0.935  0.935  0.935  .....  
2011-03-10  03:52:00  0.935  0.935  0.935  .....  
2011-03-10  03:53:00  0.935  0.935  0.935  .....  
2011-03-10  03:54:00  0.935  0.935  0.935  .....  

【问题讨论】:

    标签: mysql date join


    【解决方案1】:

    试试这个:

    USE moisturedb  
    SELECT citymoisture.date, citymoisture.time, citymoisture.close  
    FROM citymoisture INNER JOIN cityname ON cityname.city_ID=citymoisture.city_ID
    WHERE (citymoisture.date BETWEEN '2011/03/09' AND '2011/03/14') AND cityname.city_full_name='boston'
    

    【讨论】:

    • 成功了...非常感谢。非常感谢您的帮助。
    • 嗨 Mahin - 我还有一个问题要问你。是否可以提取多个城市名称的数据?即cityname.city_full_name='波士顿、多伦多、亚特兰大、奥兰多'等...??
    • 你可以使用这样的东西; WHERE (citymoisture.date BETWEEN '2011/03/09' AND '2011/03/14') GROUP BY cityname.city_full_name 这将根据城市名称对结果进行分组。如果您真的只想要选定的城市,请尝试使用OR,例如:WHERE (citymoisture.date BETWEEN '2011/03/09' AND '2011/03/14') AND (cityname.city_full_name='Boston' OR cityname.city_full_name='NY')。否则你可以尝试使用pattern matching
    • 哎呀...我忘了IN函数,因为@nikhil500提到你也可以使用它:)
    • 谢谢 Mahin - 唯一的问题是 'citymoisture.close' 的结果是结合在一起的。我希望让 mySQL 在查询输出中将每个城市视为自己的列。嗯...
    【解决方案2】:
    SELECT citymoisture.date, citymoisture.time, citymoisture.close 
    FROM citymoisture LEFT JOIN cityname USING (city_ID)
    WHERE (citymoisture.date BETWEEN '2011/03/09' AND '2011/03/14')
    AND citymoisture.city_full_name='boston';
    

    但是,我认为您在问题中发布的查询是应该使用的查询。您必须有一个带有下拉菜单的前端,供用户选择城市。可以使用cityname 填充该下拉列表,以便在用户选择城市时将city_ID 发送回服务器。然后,您可以在您发布的原始查询中使用city_ID。作为参考,请检查option 标签herevalue 属性。

    【讨论】:

    • 您好 nikhil500。感谢您的代码和反馈。它有点复杂,所以我需要城市名称。话虽如此 - 我如何生成一个结果,该结果会提取 citymoisture.date、citymoisture.time 和 close 数据以获取城市名称列表?我可以在 citymoisture.city_full_name='boston, toronto, atlanta, orlando' 上添加名称列表吗???
    • SELECT citymoisture.date, citymoisture.time, citymoisture.close FROM citymoisture LEFT JOIN cityname USING (city_ID) WHERE (citymoisture.date BETWEEN '2011/03/09' AND '2011/03/14' ) AND citymoisture.city_full_name IN ('boston', 'toronto', 'atlanta', 'orlando')
    • 谢谢 Nikhil - 唯一的问题是 'citymoisture.close' 的结果是结合在一起的。我希望让 mySQL 在查询输出中将每个城市视为自己的列。嗯
    • 您能否发布一个示例输出,您通过上述查询获得的输出以及您实际期望的输出?
    • 嗨 Nikhil... 我刚刚用示例输出和所需输出更新了我的原始帖子。我希望这会有所帮助。谢谢。
    猜你喜欢
    • 2010-12-28
    • 2012-08-27
    • 2016-10-12
    • 2021-12-20
    • 2015-09-26
    • 2020-08-08
    • 2014-09-30
    • 1970-01-01
    • 2021-08-16
    相关资源
    最近更新 更多