首页 文章

选择*除Null字段外

提问于
浏览
0

我的数据库出了问题 . 我有以下内容:

create table book
(
    name_b varchaR(50) primary key,
    typee varchaR(50) not null,
    nmbr integer unique not null,
    yeare numeric(4,0) default null,
)

create table story
(
    id integer identity(1,1) primary key,
    name_s varchar(100) not null,
    chars varchar(100) not null,
    code varchaR(200) null,
    artist varchar(100) default null,
    argument varchar(100) default null,
    book_ref_name varchar(50) references book(name_b),
    book_ref_nmbr integer references book(nmbr)
)

insert into story values
('StoryName1','StoryChars1',null,default,default,'BookName1',13),
('StoryName2','StoryChars2',null,default,default,'BookName2',35),
('StoryName3','StoryChars3',null,default,default,'BookName3',125)

insert into book values
('BookName1','Type1',13,default),
('BookName2','Type2',35,default),
('BookName3','Type3',125,default)


UPDATE story
SET code = name_s + '-' + chars + '-' + book_ref_name + '-' + Convert(varchar(50), book_ref_nmbr)
WHERE code IS NULL

我怎样才能创建一个SELECT语句,从STORY中选择*除了空字段 . 例如,如果一个故事没有论据者/艺术家,我不希望该字段出现 .

例如:

select * from story where name_s = 'StoryName1' 的结果将是下面的table,但因为这两个字段是NULL,我希望它像这样table

对于最后一个表格显示我这样做 select id,name_s,chars,code,book_ref_name,book_ref_nmbr from story where name_s = 'StoryName1'

我试图做这样的事情(这个代码显然不存在只是一个例子,试图更好地解释我)

select ""notnullcollumns"" from story where name_s = 'StoryName1'

4 回答

  • 0

    这是不可能的!您的示例显示了两个表,每个表只有一行,但表通常有更多行 . 如果您有一个包含两行的表,并且其中只有一行在这些列上有 NULL 值,该怎么办?

    现在,你可以做的就是省略你的 SELECT 子句中的列 . 或者也许使用COALESCENULL 值更改为非 NULL .

  • 0

    记住 * 的含义 . 它只是枚举投影,AKA,列的替代品 .

    你怎么不选择给定行中的列?这没有任何意义,因为您的输出必须具有布局 .

    您应该认真考虑输出布局如何,然后让我们知道 . 目前,这个问题没有多大意义 .

  • 3

    为什么不在你的问题中选择最后一个?如果你没有添加它们 . 无论值如何, Select * 都将返回所有字段(列) .

    PS:这闻起来像一个多值字段,你应该避免它们:

    chars varchar(100) not null
    
  • 1

    你可以这样做:

    SELECT id, 
          'code' AS a_type, code AS a_value
      FROM story
    UNION
    SELECT id, 
          'artist' AS a_type, artist AS a_value
      FROM story
    UNION
    SELECT id, 
          'argument' AS a_type, argument AS a_value
      FROM story
    UNION...
    

    但如果这看起来不错,那么你可能需要改变你的设计 .

相关问题