[英]How to find a first column and first row in a table using 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
如果您使用JDBC或其他一些數據庫訪問API,那么大多數這些APIS都允許您執行"select *"
,然后您可以通過訪問結果集的零(或第一)元素來獲得第一列。
從概念上講,SQL表是無序的。 您需要指定要排序的列,以便“第一行”的概念有意義。
如果您的DBMS支持LIMIT,這很容易。
SELECT * FROM table ORDER BY column LIMIT 1
否則你可以使用TOP,但是如果你的order by column有頂部項的重復值,你可能會得到比你要求的更多的行(取決於你的DBMS,在MS-SQL中,除非你指定WITH,否則它不會這樣做領帶)。
SELECT TOP 1 * FROM Table ORDER BY column
關系表沒有定義的行順序,因此沒有第一行。 您當然可以使用數據庫提供的LIMIT
等效值從查詢中選擇第一個結果。
當您運行沒有有序游標的查詢時,某些使用ISAM類型表的數據庫似乎會返回一致的行順序,但刪除和插入可以輕松地更改它。
Select top 1 Column1
From MyTable
Order by Column1
如果您要查找輸入到表中的第一條記錄,則需要在創建表時設置DateEntered字段,然后您可以通過搜索最早的日期來查找第一條記錄。 在標識字段上排序如果你有一個是獲取早期記錄的方法,但你不能真正保證創建ID 1的事務確實比生成ID 2的事務更早插入到表中。你只知道該事務首先開始,先沒先完成。 使用日期字段是真正確定的唯一方法。 多年來,我學會了為這些東西設計,以后你不能查詢你沒有存儲的信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.