1

我的数据库有问题。我有以下内容:

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

我如何制作一个从 STORY 中选择 * 的 SELECT 语句,除了空字段。例如,如果一个故事没有争论者/艺术家,我不希望该领域出现。

例如:

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

为了让最后一张桌子以这种方式显示,我这样做了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

4 回答 4

3

记住 的意思*。它只是枚举投影(AKA)列的替代品。

您如何不选择给定行中的列?这是没有意义的,因为你的输出必须有一个布局。

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

于 2012-03-20T23:01:35.847 回答
1

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

现在,您可以做的只是SELECT在您的示例中省略子句中的列。或者也许用于COALESCENULL值更改为非NULL.

于 2012-03-20T23:06:44.373 回答
0

为什么不选择问题中的最后一个选项?如果您不想要它们,请不要添加它们。Select *将返回所有字段(列),而不考虑值。

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

chars varchar(100) not null
于 2012-03-20T23:03:41.400 回答
0

你可以这样做:

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...

但如果这对您来说看起来不错,那么您可能需要更改您的设计。

于 2012-03-21T08:52:42.310 回答