当前位置: 首页 > 面试题库 >

克服SQL查询中的歧义字段错误

宰父浩漫
2023-03-14
问题内容

我有4张桌子,这个查询

SELECT tag.id, title
FROM tag
LEFT JOIN tag_map ON ( tag.id = tag_map.tag_id ) 
LEFT JOIN post ON ( post.id = post_id ) 
LEFT JOIN game ON ( game.id = post_id ) 
LEFT JOIN video ON ( video.id = post_id ) 
WHERE tag_slug =  "blizzard"
ORDER BY tag_map.post_type

此查询中的问题是,左连接语句上的3个表都具有标题列。因此,我收到“字段列表中的列“标题”不明确”错误。

我该如何处理,以便查询显示每一行的相关标题字段。


问题答案:

根据评论中提供给其他响应的其他信息,似乎需要根据post_type选择一个DIFFERENT标题字段,并且post_types与post,game和video表相对应。

我假设post_type是一个字符的文本列。

您可以使用LEFT JOIN或UNION两种方式来实现。

SELECT tag.id, 
CASE post_type 
   WHEN 'P' THEN post.title 
   WHEN 'V' THEN video.title 
   WHEN 'G' THEN game.title
END CASE
FROM tag
LEFT JOIN tag_map ON ( tag.id = tag_map.tag_id ) 
LEFT JOIN post ON ( post.id = post_id ) 
LEFT JOIN game ON ( game.id = post_id ) 
LEFT JOIN video ON ( video.id = post_id ) 
WHERE tag_slug =  "blizzard"
ORDER BY tag_map.post_type

但是,UNION解决方案可能更清晰:

SELECT tag.id, post_type, title 
  FROM tag_map INNER JOIN post ON tag_map.post_id = post.id
UNION ALL
SELECT tag.id, post_type, title 
  FROM tag_map INNER JOIN game ON tag_map.post_id = game.id
UNION ALL
SELECT tag.id, post_type, title 
  FROM tag_map INNER JOIN video ON tag_map.post_id = video.id
WHERE tag_slug =  "blizzard"
ORDER BY tag_map.post_type

(请注意,我略微简化了答案,因为尚不清楚tag和tag_map之间的关系,您可能需要将两个表都引入SELECTS中。)



 类似资料:
  • 问题内容: 我想找到一个SQL查询来查找其中field1不包含$ x的行。我怎样才能做到这一点? 问题答案: 这是什么领域?IN运算符不能与单个字段一起使用,而应与子查询或预定义列表一起使用: 如果要搜索字符串,请使用LIKE运算符(但这会很慢): 如果将其限制为要搜索的字符串必须以给定的字符串开头,则可以使用索引(如果该字段上有索引)并且速度相当快:

  • 我有两张有相同字段桌子。(请不要责怪设计)。 以下仅针对示例架构 表A ID 姓名 电话 键 所以,我想在一次查询中从满足条件“keys”的表A或表B中查询id、name,返回字段只有“id”和“name”,不管它是从表A或表B 中查询 从TABELA中选择a.id、a.name、b.id、b.name作为a,TABLEB作为b,其中a.keys=“1”或b.keys=“1” 它将重复的id、na

  • 问题内容: 我不敢相信我在问这个,但是… 您如何使用SCALA在SPARK SQL中逃逸SQL查询字符串? 我已经厌倦了一切,到处搜寻。我以为apache commons库可以做到,但是没有运气: ”‘“).map(_.getValuesMapAny)).collect().foreach(println); 返回以下内容: topic =’‘’Ulmus_minor _’‘Toledo’‘’^在

  • 我不敢相信我问这个但是... 如何使用Scala在SPARK SQL中转义SQL查询字符串? 我累了所有的东西,到处找。我以为apache commons库可以做到这一点,但运气不好: 返回以下内容: 帮个忙就好了。 j

  • 问题内容: 我试图在扩展CrudRepository的存储库中执行一些SQL查询。我在控制器中有以下代码: DAO代码如下: 该类是: 投影为: 我对如何添加查询(诸如此类)感到困惑: 我如何更改投影,还有哪些其他必要的更改? 问题答案: 您可以将DAO更改为下面,这应该可以工作。 } 确保Bean类构造函数应具有传递的参数。 验证查询是否为有效的JPA查询(此处)。

  • 问题内容: 我正在使用CodeIgniter将一些数据插入MySQL表中。因为我正在使用并且不想编辑活动记录类以启用此功能,所以我正在手动生成SQL查询。 问题: 当字符串中包含单引号时,查询失败。如何使这些需要转义的字符自动转义,例如使用活动记录时? 问题答案: 另一种方法是使用查询绑定,该绑定会自动转义所有值: