【发布时间】:2015-08-21 08:44:21
【问题描述】:
我正在尝试编写一个查询来汇总三个表中的数据:
---------------------------------
| destinations |
---------------------------------
| id | city | status |
---------------------------------
| 1 | Milan | Open |
| 2 | Florence | Open |
| 3 | Venice | Open |
---------------------------------
---------------------------------
| trips |
---------------------------------
| id | from | to | train |
---------------------------------
| 1 | 1 | 2 | 2 |
| 2 | 1 | 2 | 3 |
| 3 | 2 | 1 | 2 |
| 4 | 2 | 3 | 2 |
| 5 | 1 | 3 | 1 |
| 6 | 3 | 1 | 1 |
---------------------------------
---------------------------------
| trains |
---------------------------------
| id | train |
---------------------------------
| 1 | T1 |
| 2 | ChooChoo |
| 3 | IC123 |
---------------------------------
我的想法是,我希望能够向我的用户展示从佛罗伦萨开始或结束的所有旅行。
类似的东西:
-----------------------------------------------------------------
| Query: all trains going to/from Florence |
-----------------------------------------------------------------
| trips.id | from.id | from (city) | to.id | to. city | train |
-----------------------------------------------------------------
| 1 | 1 | Milan | 2 | Florence | 2 |
| 2 | 1 | Milan | 2 | Florence | 3 |
| 3 | 2 | Florence | 1 | Milan | 2 |
| 4 | 2 | Florence | 3 | Venice | 2 |
-----------------------------------------------------------------
我面临的问题基本上有两个:目标的自动引用表(我可以使用别名轻松解决)以及我试图组合来自两个不同选择的两组数据的事实(我考虑用临时表解决)。
现在,如果不是某些列具有相同的名称,那就太好了。因为我想在我的临时表中保留“ids”(与链接一起使用)我不能用通配符创建一个临时表(例如 SELECT * FROM),但我必须拼出所有列和写一个可怕的查询。它会工作,但它不会灵活,如果我将来添加其他列,更新它会很糟糕!
请任何 MySQL 专家提出更好的方法吗?
来自澳大利亚的感谢和欢呼。
【问题讨论】:
-
抱歉,但我不明白“在 (a.from=b.id) .... 上旅行左连接目的地 b”有什么问题。
-
(虽然我知道您在 SO 上找到了 100 个示例,但我没有这样做...)您应该始终在 SELECT 中命名列。如果做不到,通常说明设计存在缺陷。
-
好点@Strawberry 也许我应该审查设计,虽然这个例子(和你的解决方案)的简单性让我觉得这已经不是太糟糕了。再次感谢。
标签: mysql temp-tables