【问题标题】:SQL - how to SELECT multiple tables and JOIN multiple rows from the same column?SQL - 如何从同一列中选择多个表并连接多行?
【发布时间】:2011-12-26 14:39:32
【问题描述】:

如何从同一列中选择多个表并连接多行?

它不返回painting.id_grouppainting.id_typepainting.id_location。 我确定这个 SQL sn-p 语法错误。

SELECT painting.id, painting.order, painting_en.url, id_portfolio.en
FROM painting
LEFT JOIN painting_en
USING ( id ) 
LEFT JOIN id_portfolio ON id_portfolio.id = painting.id_group
AND id_portfolio.id = painting.id_type
AND id_portfolio.id = painting.id_location
WHERE painting_en.url='2011-name3'
LIMIT 1

更新: 它显示Showing rows 0 - 0 ( 1 total, Query took 0.0004 sec)。 删除后

AND id_portfolio.id = painting.id_type
AND id_portfolio.id = painting.id_location

它返回:

id        | order | url        |en
----------+-------+------------+-----
09518709  | 4     | 2011-name3 | NULL

但我需要返回:

id        | order | url        | group   | type          | location
----------+-------+------------+---------+---------------+---------
09518709  | 4     | 2011-name3 | realism | oil on canvas | US

【问题讨论】:

  • 你是什么意思它不返回它们?返回的网格是否只有 1 列?
  • 我用 SQL 结果和预期结果更新了我的问题。

标签: mysql sql select join


【解决方案1】:

您可以多次加入同一个表,您只需要提供不同的别名

SELECT painting.id, 
       painting.order, 
       painting_en.url, 
       `group`.en AS `group`, 
       TYPE.en AS type, 
       location.en AS location
FROM   painting 
       LEFT JOIN painting_en 
       USING (id) 
       LEFT JOIN id_portfolio `group` 
         ON `group`.id = painting.id_group 
       LEFT JOIN id_portfolio TYPE 
         ON TYPE.id = painting.id_type 
       LEFT JOIN id_portfolio location 
         ON location.id = painting.id_location 
WHERE  painting_en.url = '2011-name3' 
LIMIT  1 

【讨论】:

  • MySQL 返回错误 #1054 - '字段列表'中的未知列 'id_portfolio.en' for SELECT painting.id, painting.order, painting_en.url, id_portfolio.en AS 'group' , id_portfolio.en AS 'type' , id_portfolio.en AS location FROM painting LEFT JOIN painting_en USING ( id ) LEFT JOIN id_portfolio 'group' ON id_portfolio.id = painting.id_group LEFT JOIN id_portfolio 'type' ON id_portfolio.id = painting.id_type LEFT JOIN id_portfolio location ON id_portfolio.id = painting.id_location WHERE painting_en.url = '2011-name3' LIMIT 1
  • 那是因为你需要在 SELECT 子句中使用表别名而不是实际的表名
  • 您的 SQL 必须运行良好。 MySQL 在 #1054 - 'field list' 中的未知列 'id_portfolio.en' 之前返回了我,因为 db 中缺少一些列。现在已经修复了。也为了更好的性能 - 如果没有这样的需要,请不要使用 LEFTRIGHT
猜你喜欢
  • 2016-05-20
  • 2012-01-01
  • 1970-01-01
  • 2021-02-09
  • 2010-10-03
  • 1970-01-01
  • 2013-05-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多