场景:我的表有单列(字符串)。我想检索以特定顺序存储的数据。
表Tbl_EmployeeName只有一列“名称”
我通过以下查询插入记录
Insert Into Tbl_EmployeeName
select 'Z'
union
select 'y'
union
select 'x'
union
select 'w'
union
select 'v'
union
select 'u'
union
select 't'
union
select 's'
现在我希望这些记录的插入顺序与插入顺序相同。 当我运行查询时:
select * from Tbl_EmployeeName
它将按名称asc按默认顺序排列记录。 即
结果输出
s
t
u
v
w
x
y
Z
我想以这种方式记录所有记录
预期产出
z
y
x
w
v
u
t
s
请问您是否有任何方法可以按正确顺序输入记录,并且不会在表格中添加任何新列。
答案 0 :(得分:1)
我通过以下查询插入记录
...query using union...
现在我希望这些记录的插入顺序与其相同。
令人惊讶的是, 按照插入顺序检索记录。在UNION
上的每个SELECT
语句之间使用INSERT
会导致在插入之前对记录进行排序。 UNION
对所有结果都有固有的DISTINCT
。将其切换为UNION ALL
将消除固有的排序。
...无论其
您能否建议我以正确的顺序输入记录,并且不向表中添加任何新列。
不幸的是,不可能。 SQL表表示无序集。它没有记录顺序或它们被插入顺序的原生概念。
当我运行查询
按默认顺序排列记录select * from Tbl_EmployeeName
时 它将按名称asc。
这是错误的。如上所述,返回的是 no 默认顺序。执行该查询时可能得到的任何结果都只是巧合。如果不指定ORDER BY
子句,则订单不保证。
请您建议我有什么方法可以按照正确的顺序输入记录
与您的问题相反,您可以通过在表格中添加新列来实现此目的。通过如下设置表:
Create Table Tbl_EmployeeName
(
Id Int Identity(1,1) Not Null,
Name Varchar (10) -- Or whatever your size is
);
然后进行插入:
Insert Tbl_EmployeeName
(Name)
Values ('Z'),
('y'),
('x'),
('w'),
('v'),
('u'),
('t'),
('s')
并查询:
Select Name
From Tbl_EmployeeName
Order By Id Asc
答案 1 :(得分:0)
您可以使用 FIND_IN_SET
按自己的顺序对其进行排序SELECT *
FROM Tbl_EmployeeName
ORDER BY FIND_IN_SET(Name,'Z,y,x,w,v,u,t,s');
如果你不知道插入顺序使用它,那么直接有一个AUTOINCREMENT字段。
CREATE TABLE `Tbl_EmployeeName` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`Name` varchar(64) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
SELECT *
FROM Tbl_EmployeeName
ORDER by id;
答案 2 :(得分:0)