我有一张包含大量列的表格。这么多,当我SELECT *
时,我甚至看不到任何值,因为所有列都填满了屏幕。我想做这样的事情:
SELECT * FROM my_table WHERE NAME LIKE '%unique name%' AND <THIS COLUMN> IS NOT NULL
这可能吗? 注意:VALUE不是列。
有so many questions on SO提出同样的问题,但它们有一些奇怪的转折,实际的问题没有得到解答。
我试过了:
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
奖金问题:
WHERE this.column = '1'
,它会检查每一列以匹配该表达式吗?答案 0 :(得分:2)
如果您尝试查找特定记录的所有非空列值,则可以尝试使用unpivot,前提是您要取消的所有列都具有相同的数据类型:
sudo su
使用上面的代码将排除空值,除非您包含可选的 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
你可以有一个相当大的一组列组,虽然在这里我只显示三个,每个主要数据类型一个,使用IN列表,你需要为列组中的每一列列出一列,尽管您可以重复使用date_val列所示的列,其中我使用了date1两次。作为重用现有列的替代方法,您可以使用具有空值的虚拟列:
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)));
答案 1 :(得分:0)
试过这个吗?
SELECT * FROM my_table WHERE NAME LIKE '%unique name%' AND value IS NOT NULL;
Oracle / PLSQL: IS NOT NULL Condition
对于行号:
SELECT field1, field2, ROW_NUMBER() OVER (PARTITION BY unique_field) R WHERE R=1;
通常在Linux控制台中,您可以使用向上箭头和向下箭头重复最后一句话。