【问题标题】:3 table joins one field from one table and one field from another3表连接一个表的一个字段和另一个字段的一个字段
【发布时间】:2011-01-31 19:13:18
【问题描述】:

我有这个问题

SELECT cities.city, city_time.time_slot 
FROM cities, city_date, city_time 
WHERE city_time.city_date_id = city_date.city_id = city_date.city_id =  cities.id 
AND city_time.city_date_id = '1'

我正在尝试让 city.city 和 city_time.time_slot 进入同一行,它们通过 city_date 连接,

cities has- 
===========
id
city, 

city_date  has
===========
id
city_id (fk for city_table)

city_time has
==============
city_date_id (FK for city_date table)
time_slot

尝试了几种方法-

SELECT cities.city, city_time.time_slot 
FROM (city_date LEFT JOIN cities ON city_time.city_date_id = city_date.city_id ) 
LEFT JOIN city_date ON city_time.city_date_id = city_date.city_id 
WHERE  city_time.city_date_id = '1'

我只想将 city 表中的 city 字段链接到 city_time 表中的 time_slot 字段。甚至不需要左连接,但我想我会包含它以帮助您理解我的想法。

【问题讨论】:

  • 您能否在code 块中格式化您的SQL 代码?这样会更容易阅读。

标签: sql mysql join


【解决方案1】:
select c.city, ct.time_slot
    from cities c
        inner join city_date cd
            on c.id = cd.city_id
        inner join city_time ct
            on cd.id = ct.city_date_id
    where ct.city_date_id = 1

【讨论】:

  • Plus 1 摆脱了那种可怕的隐式连接语法!
【解决方案2】:

从您的其他问题来看,这似乎是您所追求的。
请开始为别名使用较短的名称(希望仍然有意义)。

SELECT c.city, t.time_slot 
FROM cities c
LEFT JOIN city_date d on d.city_id = c.id 
LEFT JOIN city_time t on t.city_date_id = d.city_id AND t.city_date_id = '1'

【讨论】:

    【解决方案3】:

    这两个表中应该有一些共同点,以便您可以比较它并获得您想要打印的内容。例如添加具有相同记录的城市 ID 和城市时间 ID。

    【讨论】:

      猜你喜欢
      • 2020-06-25
      • 1970-01-01
      • 2015-10-03
      • 2011-02-15
      • 1970-01-01
      • 2017-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多