mysql中如何在where后面选择要获取的列呢

CQZrz 2017-07-12 04:13:21
不能再select后面用列名来指定要获取的列,而是需要在where后面来制定,有什么函数可以实现这个功能的吗 各位
...全文
579 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
道素 2017-07-18
  • 打赏
  • 举报
回复
你是这个意思吗?

drop table if exists dat;
create table dat(A int,B int,C INT,D INT,E INT,F INT);

insert into dat(A,B,C,D,E,F)values(1,2,3,4,5,6),(7,8,9,10,11,12),(13,14,15,16,1,18);
drop table if exists def;
create table def(colName varchar(10),ColID int);
insert into def(ColName,ColID)values
('A',1),('B',2),('C',3),('D',4),('E',5),('F',6);


set  @colID:=3, @colValue:='9';


select @sql:=colName from def where colID=@colID; ##根据序列返回列名
select @sql:='SELECT * FROM dat WHERE '+@sql+'='+@colvalue; ##加入到Where中
select @sql
EXEC(@sql);

道素 2017-07-18
  • 打赏
  • 举报
回复
你是这个意思吗?

drop table if exists dat;
create table dat(A int,B int,C INT,D INT,E INT,F INT);

insert into dat(A,B,C,D,E,F)values(1,2,3,4,5,6),(7,8,9,10,11,12),(13,14,15,16,1,18);
drop table if exists def;
create table def(colName varchar(10),ColID int);
insert into def(ColName,ColID)values
('A',1),('B',2),('C',3),('D',4),('E',5),('F',6);


set  @colID:=3, @colValue:='9';


select @sql:=colName from def where colID=@colID; ##根据序列返回列名
select @sql:='SELECT * FROM dat WHERE '+@sql+'='+@colvalue; ##加入到Where中
select @sql
EXEC(@sql);

xiongxiangju7428 2017-07-13
  • 打赏
  • 举报
回复
哎 其实一个casewhenthen就解决了得问题,可能我表达问题吧...........
卖水果的net 2017-07-12
  • 打赏
  • 举报
回复
在屁。拼接where 的同时,记录下这些列就可以了。
OwenZeng_DBA 2017-07-12
  • 打赏
  • 举报
回复
感觉你这逻辑好混乱,,期待其他大神看看吧
CQZrz 2017-07-12
  • 打赏
  • 举报
回复
好苦恼,要是有别的想法也好,如果我这个想法不行
CQZrz 2017-07-12
  • 打赏
  • 举报
回复
引用 9 楼 z10843087 的回复:
@CQZrz 你举个实际的例子吧。“”在select与from之间如何嵌套“ 没有看明白。你的意思是要遍历这些列名?
我已经通过sql语句得到了一条记录,里面有字段E F G 。。。等等字段, 现在我建立了另一张表a,里面E F G等等字段都对应有一个整型字段b 比如E 对应 1,F 对应 2,G对应3...... 我通过一个值为1的整型值c 在表a里面通过字段b 找到E,然后我想要用这个得到的E,去获取那条记录里面的E,然后判断这个E的值 完了后,我使这个c加一,同样这样循环,就可以继续遍历下去了....对那条记录里面的每个值都判断
OwenZeng_DBA 2017-07-12
  • 打赏
  • 举报
回复
@CQZrz 你举个实际的例子吧。“”在select与from之间如何嵌套“ 没有看明白。你的意思是要遍历这些列名?
CQZrz 2017-07-12
  • 打赏
  • 举报
回复
引用 4 楼 sinat_28984567 的回复:
引用 2 楼 CQZrz 的回复:
[quote=引用 1 楼 sinat_28984567 的回复:] 没见过能这样的……
获取第N列的所有值 且不用列名 这样应该可以实现的吧
 DECLARE @col NVARCHAR(MAX)
 DECLARE @str NVARCHAR(MAX)
 SELECT @col = name
 FROM   syscolumns
 WHERE  id = OBJECT_ID('表名')
        AND colid = N
 SET @str = 'select ' + @col + ' from 表名'
 EXEC(@str)
[/quote]好像不行啊
CQZrz 2017-07-12
  • 打赏
  • 举报
回复
引用 6 楼 z10843087 的回复:
[quote=引用 5 楼 CQZrz 的回复:] [quote=引用 3 楼 z10843087 的回复:] [quote=引用 2 楼 CQZrz 的回复:] [quote=引用 1 楼 sinat_28984567 的回复:]
你是想获取表的所有列名吗 ?可以查看表上所有的列
 select COLUMN_NAME from information_schema.COLUMNS where table_name = 'your_table_name';
[/quote] 不是这个意思,或者说 在select与from之间如何嵌套呢。。 如果这个问题可以解决,也可以实现我想要的
OwenZeng_DBA 2017-07-12
  • 打赏
  • 举报
回复
引用 5 楼 CQZrz 的回复:
[quote=引用 3 楼 z10843087 的回复:] [quote=引用 2 楼 CQZrz 的回复:] [quote=引用 1 楼 sinat_28984567 的回复:]
你是想获取表的所有列名吗 ?可以查看表上所有的列
 select COLUMN_NAME from information_schema.COLUMNS where table_name = 'your_table_name';
CQZrz 2017-07-12
  • 打赏
  • 举报
回复
引用 3 楼 z10843087 的回复:
引用 2 楼 CQZrz 的回复:
[quote=引用 1 楼 sinat_28984567 的回复:] 没见过能这样的……
获取第N列的所有值 且不用列名 这样应该可以实现的吧
这么做的目的是什么?[/quote] 在kettle里面,我想要遍历一条记录的某些字段,不能设置变量,且字段较多,不能每个字段都手动拿出来判断,而是应该要去遍历,但是不知道如何实现,select与from 写不了嵌套 如果能写嵌套在里面也好,就不用在where后面想办法了
二月十六 2017-07-12
  • 打赏
  • 举报
回复
引用 2 楼 CQZrz 的回复:
引用 1 楼 sinat_28984567 的回复:
没见过能这样的……
获取第N列的所有值 且不用列名 这样应该可以实现的吧
 DECLARE @col NVARCHAR(MAX)
 DECLARE @str NVARCHAR(MAX)
 SELECT @col = name
 FROM   syscolumns
 WHERE  id = OBJECT_ID('表名')
        AND colid = N
 SET @str = 'select ' + @col + ' from 表名'
 EXEC(@str)
OwenZeng_DBA 2017-07-12
  • 打赏
  • 举报
回复
引用 2 楼 CQZrz 的回复:
引用 1 楼 sinat_28984567 的回复:
没见过能这样的……
获取第N列的所有值 且不用列名 这样应该可以实现的吧
这么做的目的是什么?
CQZrz 2017-07-12
  • 打赏
  • 举报
回复
引用 1 楼 sinat_28984567 的回复:
没见过能这样的……
获取第N列的所有值 且不用列名 这样应该可以实现的吧
二月十六 2017-07-12
  • 打赏
  • 举报
回复
没见过能这样的……

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧