如何仅从oracle中选择现有值?
我有一个包含大量列的表。太多了,当我如何仅从oracle中选择现有值?,oracle,Oracle,我有一个包含大量列的表。太多了,当我选择*时,我甚至看不到任何值,因为所有的列都填满了屏幕。我想这样做: SELECT * FROM my_table WHERE NAME LIKE '%unique name%' AND <THIS COLUMN> IS NOT NULL 从my_表中选择*,其中名称类似于“%unique NAME%”,且不为空 这可能吗?注意:值不是一列 有很多人问同样的问题,但他们有一些奇怪的扭曲,而实际的问题没有得到回答 我试过: SELECT * FR
选择*
时,我甚至看不到任何值,因为所有的列都填满了屏幕。我想这样做:
SELECT * FROM my_table WHERE NAME LIKE '%unique name%' AND <THIS COLUMN> IS NOT NULL
从my_表中选择*,其中名称类似于“%unique NAME%”,且不为空
这可能吗?注意:值不是一列
有很多人问同样的问题,但他们有一些奇怪的扭曲,而实际的问题没有得到回答
我试过:
SELECT * FROM my_table WHERE NAME LIKE '%unique name%' AND VALUE NOT NULL
*
Invalid relational operator
SELECT * FROM my_table WHERE NAME LIKE '%unique name%' AND VALUE <> ''
*
'VALUE': invalid identifier
SELECT * FROM my_table WHERE NAME LIKE '%unique name%' AND COLUMN NOT NULL
*
Missing Expression
从my_表中选择*,其中名称如“%unique NAME%”,值不为NULL
*
无效的关系运算符
从my_表中选择*,其中的名称如“%unique NAME%”和值“”
*
“值”:无效标识符
从my_表中选择*,其中的名称如“%unique NAME%”和列不为NULL
*
缺失表达
奖金问题:
其中this.column='1'
,它将在其中检查每一列以匹配该表达式SELECT * FROM my_table WHERE NAME LIKE '%unique name%' AND value IS NOT NULL;
对于行号:
SELECT field1, field2, ROW_NUMBER() OVER (PARTITION BY unique_field) R WHERE R=1;
通常在Linux控制台中,您可以使用上下箭头重复最后一句话。您试过这个吗
SELECT * FROM my_table WHERE NAME LIKE '%unique name%' AND value IS NOT NULL;
对于行号:
SELECT field1, field2, ROW_NUMBER() OVER (PARTITION BY unique_field) R WHERE R=1;
通常,在Linux控制台中,您可以使用上下箭头重复最后一句话。如果您试图查找特定记录的所有非空列值,您可以尝试取消激活,前提是要取消激活的所有列都具有相同的数据类型:
SELECT *
FROM (select * from my_table where name like '%unique value%')
UNPIVOT [include nulls] (col_value FOR col_name IN (col1, col2, ..., coln))
在上述代码中,除非包含可选的include nulls
语句,否则将排除空值,并且需要明确列出要取消激活的每一列
如果它们并非都具有相同的数据类型,则可以使用一个不一定要删除所有空值的变体:
select *
from (select * from my_table where name like '%unique value%')
unpivot ((str_val, num_val, date_val)
for col_name in ((cola, col1, date1)
,(colb, col2, date2)
,(colc, col3, date1)));
您可以有一组相当大的列组,虽然这里我只显示了三个,每个主要数据类型一个,在IN列表中,您需要为列组中的每一列列出一个列,尽管您可以重用date_val列所示的列,我在其中使用了date1两次。作为重用现有列的替代方法,可以使用空值的伪列:
select *
from (select t1.*, null dummy from my_table t1 where name like '%unique value%')
unpivot ((str_val, num_val, date_val)
for col_name in ((dummy, col1, date1)
,(colb, dummy, date2)
,(colc, col3, dummy)));
如果要查找特定记录的所有非空列值,可以尝试取消IVOT,前提是要取消IVOT的所有列都具有相同的数据类型:
SELECT *
FROM (select * from my_table where name like '%unique value%')
UNPIVOT [include nulls] (col_value FOR col_name IN (col1, col2, ..., coln))
在上述代码中,除非包含可选的include nulls
语句,否则将排除空值,并且需要明确列出要取消激活的每一列
如果它们并非都具有相同的数据类型,则可以使用一个不一定要删除所有空值的变体:
select *
from (select * from my_table where name like '%unique value%')
unpivot ((str_val, num_val, date_val)
for col_name in ((cola, col1, date1)
,(colb, col2, date2)
,(colc, col3, date1)));
您可以有一组相当大的列组,虽然这里我只显示了三个,每个主要数据类型一个,在IN列表中,您需要为列组中的每一列列出一个列,尽管您可以重用date_val列所示的列,我在其中使用了date1两次。作为重用现有列的替代方法,可以使用空值的伪列:
select *
from (select t1.*, null dummy from my_table t1 where name like '%unique value%')
unpivot ((str_val, num_val, date_val)
for col_name in ((dummy, col1, date1)
,(colb, dummy, date2)
,(colc, col3, dummy)));
您可以为更频繁的列集创建一些视图..我不太确定我是否理解您要查找的内容。在本例中,
my_table
是一个包含列name
和另一列value
的表吗?或者您正在尝试执行以下操作:name
是表中每列的名称,value
是该列中的值?因此,如果我有一个包含数百列的表,我会动态地选择要读取的列,并且只显示其中至少一列具有非空值的行?value
不是列<代码>名称是一列。LIKE表达式中的名称足够唯一,只能返回一行。但是,它返回的列太多,它们填满整个屏幕而不显示任何值。为什么不选择您感兴趣的列而不是所有列:select name,myu表中的col1,其中名称“%unique name%”和col1不为NULL
是否允许您在该数据库上创建过程?您可以创建一个以表名和where条件作为输入参数、迭代表架构的列、对每列执行select,并且dbms_output
-打印列名和值(如果列名和值非空)。附加问题2:不,where子句中没有“当前列”的概念。您可以为更频繁的列集创建一些视图。我不太确定我是否理解您要查找的内容。在本例中,my_table
是一个包含列name
和另一列value
的表吗?或者您正在尝试执行以下操作:name
是表中每列的名称,value
是该列中的值?因此,如果我有一个包含数百列的表,我会动态地选择要读取的列,并且只显示其中至少一列具有非空值的行?value
不是列<代码>名称是一列。LIKE表达式中的名称足够唯一,只能返回一行。但是,它返回的列太多,它们填满整个屏幕而不显示任何值。为什么不选择您感兴趣的列呢