【发布时间】:2009-05-12 15:37:13
【问题描述】:
我被问到这个问题,但无法得出答案。
有没有办法在表格的第一行和第一列找到条目?
(在矩阵表示法中,这将是[1,1]th 位置)
【问题讨论】:
-
输入表名需要动态sql语句吗?
-
我想问我是否不知道列名,在这种情况下是否可能..
我被问到这个问题,但无法得出答案。
有没有办法在表格的第一行和第一列找到条目?
(在矩阵表示法中,这将是[1,1]th 位置)
【问题讨论】:
简而言之:关系表不是矩阵。
在关系世界中,1'st row 仅在您在数据集上定义某些顺序时才有意义。没有“隐式第一记录”之类的东西。
假设您根据第一列的值对行进行排序,是这样的:
SELECT column1
FROM table
ORDER BY
column1
LIMIT 1
还要注意表中不同的列属于不同的domains。
拥有表的目的是在这些domains之间定义一些relation,这就是为什么整个东西被称为“关系数据库”,而表本身有时也被称为“关系”。
列顺序在关系表中也没有特殊含义。
假设您总是按名称引用列。
如果替换列的顺序会影响查询结果,则认为这是一个糟糕的设计。
有SELECT * 和ORDER BY 1 之类的东西,但通常应该避免使用它们。
【讨论】:
有很多与问题的“第一行”部分相关的良好反馈。但就“第一列”而言,您可以尝试以下选项之一:
您可以使用数据库数据字典来获取表的第一列。例如,在 Oracle 中,查询将是:
select column_name from user_tab_columns where table_name='YOUR_TABLE_NAME' and column_id=1
【讨论】:
关系表没有定义的行顺序,因此没有第一行。您当然可以使用您的数据库提供的任何 LIMIT 等效项从查询中选择第一个结果。
当您在没有有序游标的情况下运行查询时,某些使用 ISAM 类型表的数据库会返回一致的行顺序,但删除和插入很容易改变这一点。
【讨论】:
从概念上讲,SQL 表是无序的。您需要指定要排序的列,以使“第一行”的概念有意义。
如果您的 DBMS 支持 LIMIT,这很容易。
SELECT * FROM table ORDER BY column LIMIT 1
否则,您可以使用 TOP,但如果您的 order by column 有重复的 top item 值,您可能会得到比您要求的更多的行(取决于您的 DBMS,在 MS-SQL 中,它不会这样做,除非您指定 WITH TIES)。
SELECT TOP 1 * FROM Table ORDER BY column
【讨论】:
Select top 1 Column1
From MyTable
Order by Column1
【讨论】:
如果您要查找输入到表中的第一条记录,那么您需要在创建表时设置一个 DateEntered 字段,然后您可以通过搜索最早的日期来找到第一条记录。如果您有身份字段,则对身份字段进行排序是获取较早记录的一种方法,但您不能真正保证创建 ID 1 的事务确实比生成 ID 2 的事务更早插入到表中。您只知道该事务先开始,不先完成。使用日期字段是真正确定的唯一方法。这些年来,我学会了为这些东西设计,你不能在以后查询你一开始没有存储的信息。
【讨论】: