我的数据库出了问题。我有下列内容:
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'
答案 0 :(得分:3)
记住*
的含义。它只是枚举投影,AKA,列的替代。
您如何选择给定行中的列?这没有任何意义,因为你的输出必须有一个布局。
您应该认真考虑输出布局如何,然后告诉我们。目前,这个问题没有多大意义。
答案 1 :(得分:1)
这是不可能的!您的示例显示了两个表,每个表只有一行,但表通常有更多行。如果您有一个包含两行的表,并且其中只有一行在这些列上有NULL
值,该怎么办?
现在,您可以做的就是省略SELECT
子句中的列,就像您的示例一样。或者也许使用COALESCE
将NULL
值更改为非NULL
。
答案 2 :(得分:0)
为什么不选择问题中的最后一个选项?如果您不想要它们,请不要添加它们。无论值是什么,Select *
都将返回所有字段(列)。
PS:这闻起来像一个多值字段,你应该避免它们:
chars varchar(100) not null
答案 3 :(得分: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...
但是如果这看起来不错,那么你可能需要改变你的设计。