我有两个SQL表(不能被修改,这是一个如何在没有列的情况下获取它的问题),我需要在使用内连接时找出表类型列出城市和州:
CREATE TABLE authors
(
au_id CHAR(3) NOT NULL,
au_fname VARCHAR(15) NOT NULL,
au_lname VARCHAR(15) NOT NULL,
phone VARCHAR(12) ,
address VARCHAR(20) ,
city VARCHAR(15) ,
state CHAR(2) ,
zip CHAR(5) ,
CONSTRAINT pk_authors PRIMARY KEY (au_id)
);
CREATE TABLE publishers
(
pub_id CHAR(3) NOT NULL,
pub_name VARCHAR(20) NOT NULL,
city VARCHAR(15) NOT NULL,
state CHAR(2) ,
country VARCHAR(15) NOT NULL,
CONSTRAINT pk_publishers PRIMARY KEY (pub_id)
);
我正在尝试使用CASE来正确输出选择:
SELECT CASE
WHEN LCASE(SUBSTR(/*suppose id*/, 0, 1)) == 'a'
THEN 'author'
ELSE 'publisher'
END
AS type, city, state
FROM authors
INNER JOIN publishers
这些表的格式是id不同,但也有不同的名称:
INSERT INTO authors VALUES('A01','Sarah','Buchman','718-496-7223',
'75 West 205 St','Bronx','NY','10468');
INSERT INTO publishers VALUES('P01','Abatis Publishers','New York','NY','USA');
我正试图达到这样的输出:
type | city | state
--------------------------------------------------
author | Rochester | NY
author | Syracuse | NY
publisher | New York | NY
如果两个表没有相似的列,我怎样才能有效地进行比较?我可以调用表上的字段值来检查它是否为null而不抛出SQL异常吗?
答案 0 :(得分:2)
由于没有列可以在两个表之间进行比较,即在笛卡尔积之后没有任何可以过滤掉行的内容,因此内连接不会服务于目的。它更像是从两个多组中选择记录并将它们组合起来。在T-SQL中,这可以使用Union实现:
select 'authors' as [type]
, city,state
from authors
union
select 'publishers' as [type]
, city,state
from publishers