【问题标题】:how to use 'inner join' and 'order by' in sql如何在sql中使用'inner join'和'order by'
【发布时间】:2018-08-09 17:53:01
【问题描述】:

我想在 php 页面的查询中使用内连接和排序。
我的查询:

select 
    * 
from 
    table1 
inner join 
    table1category 
    on table1.table1category_id = table1category.id
order by updateDate desc;

'updateDate' 用于 table1 => 错误:订单子句中的列 'updateDate' 不明确

【问题讨论】:

  • 错误信息说明了一切。您需要指定要订购的更新日期。例如。试试order by table1.updateDate desc
  • 需要添加table_name,如order by table1.updateDate

标签: mysql sql


【解决方案1】:

订单子句中的“updateDate”列不明确

意味着 updateDate 存在于您尝试使用的两个表中。 如果要使用此字段进行排序,则必须指定要从哪个表中排序。

例如:

SELECT
  *
FROM table1
INNER JOIN table1category
  ON table1.table1category_id = table1category.id
ORDER BY table1.updateDate DESC;

另外,请考虑在带有 JOINSSELECT 上使用 * 将从所有包含的表中获取所有列。

【讨论】:

  • 在你回答后看到其他人都在重复同样的事情,这很奇怪。
  • 好吧...¯_(ツ)_/¯
  • 你必须在 SELECT 中指定你想要的每个字段而不是 *,这也提高了查询的性能。
【解决方案2】:

当两个表中有相同的列时,你必须用这些列指定表名

SELECT
  *
FROM table1
INNER JOIN table1category
  ON table1.table1category_id = table1category.id
ORDER BY table1.updateDate DESC;

【讨论】:

  • 选择table1.rowid
【解决方案3】:

因为updateDate同时存在于table1和table1category中

SELECT
  *
FROM table1 t
INNER JOIN table1category tc
  ON t.table1category_id = tc.id
ORDER BY t.updateDate DESC;

【讨论】:

  • 通过专门命名您需要在选择中使用的列,或者简单地使用别名命名来区分两者
【解决方案4】:

您必须说明该字段使用哪个表(在两个表中都有):

select *
from table1
inner join table1category on table1.table1category_id = table1category.id
order by XXX.updateDate desc;

将 XXX 替换为 table1 或 table1category。

您也可以在表格上设置别名,例如:

select *
from table1 as myalias1
inner join table1category as myalias2 on table1.table1category_id = table1category.id
order by XXX.updateDate desc;

然后将 XXX 替换为 myalias1 或 2。

你可以做同样的选择数据(例如):

SELECT table1.id AS id, table2.id AS categoryId

【讨论】:

    【解决方案5】:

    order 子句中的updateDate 列不明确

    试试这个

    SELECT
      *
    FROM table1 t1
    INNER JOIN table1category t2
      ON t1.table1category_id = t2.id
    ORDER BY t1.updateDate DESC;
    

    【讨论】:

      【解决方案6】:

      我发现使用别名通常会使连接更容易

      SELECT
        *
      FROM table1 AS alias1
      INNER JOIN table1category AS alias2
        ON alias1.table1category_id = alias2.id
      ORDER BY alias1.updateDate DESC;
      

      【讨论】:

        【解决方案7】:

        您缺少表名

        SELECT
          *
        FROM table1
        INNER JOIN table1category
          ON table1.table1category_id = table1category.id
        ORDER BY table1.updateDate DESC;
        

        【讨论】:

          【解决方案8】:
          SELECT *, table1.updateDate as "Table1 Update Date"
          FROM table1 
          INNER JOIN table1category ON table1.table1category_id = table1category.id
          ORDER BY table1.updateDate DESC;
          

          或者你可以在 ORDER BY 子句中保留别名

          SELECT *, table1.updateDate as "Table1 Update Date"
          FROM table1 
          INNER JOIN table1category ON table1.table1category_id = table1category.id
          ORDER BY "Table1 Update Date" DESC;
          

          注意 始终以大写形式使用关键字 最好在 SELECT CLAUSE 中使用别名以便更好地理解,否则它将为 updateDate 加 1,即 updateDate1。 始终为相同的列名使用别名 不要使用所有列,即 * ,只获取所需的列

          【讨论】:

            【解决方案9】:

            选择 * 从 表1 T 内部联接 表1C类 在 T.table1category_id = C.id 按 T​​.updateDate desc 排序;

            【讨论】:

              猜你喜欢
              • 2013-02-09
              • 1970-01-01
              • 1970-01-01
              • 2023-04-02
              • 1970-01-01
              • 2017-03-30
              • 1970-01-01
              • 2021-04-01
              • 1970-01-01
              相关资源
              最近更新 更多