【问题标题】:SELECT LAST ROW WITH AN INNER JOIN使用内部连接选择最后一行
【发布时间】:2017-01-31 19:17:49
【问题描述】:

我有两个关系表 [category] ​​和 [briefs]。 我想从简报中选择最后一行 WHERE Briefs.category_id = category.category_id;

[Category]
category_id
category_name

[briefs]
brief_id
category_id
brief_file_num
brief_date



 "SELECT brief_file_num,category_id FROM briefs,category 
WHERE briefs.category_id = category.category_id ORDER BY briefs.brief_file_num 
DESC LIMIT 1";

我收到以下错误:"Column 'category_id' in field list is ambiguous"

【问题讨论】:

  • 用表名限定 select 语句选择列表。如果 x 是 table1 中的列,则必须将 table1.x 放在 select 子句查询中
  • 介意丢失标题中的大写字母吗?这叫做“大喊大叫”,没有人喜欢被人骂,是吗?我不这么认为。
  • 始终尝试使用以下格式:table_name.column_name as alias

标签: php mysql select join


【解决方案1】:

即使两个类别具有相同的值。您还需要指定您引用的表,因为两者都有一个具有该名称的列

同样使用显式 JOIN sintaxis,Aaron Bertrand 写了一篇很好的文章 Bad habits to kick : using old-style JOINs 关于它。

 SELECT briefs.brief_file_num,
        briefs.category_id    
 FROM briefs
 INNER JOIN category 
    ON briefs.category_id = category.category_id 
 ORDER BY briefs.brief_file_num 
 DESC LIMIT 1"

【讨论】:

    【解决方案2】:

    您应该明确添加表名以避免歧义

       "SELECT briefs.brief_file_num, briefs.category_id 
         FROM briefs,category 
         WHERE briefs.category_id = category.category_id ORDER BY briefs.brief_file_num 
        DESC LIMIT 1";
    

    【讨论】:

      【解决方案3】:

      两个表都有一个category_id,这是不明确的。请改用category.category_id

      SELECT brief_file_num,category.category_id FROM briefs,category 
      WHERE briefs.category_id = category.category_id ORDER BY briefs.brief_file_num 
      DESC LIMIT 1
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-03-16
        • 2012-09-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-10
        相关资源
        最近更新 更多