1

私は2つの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) 
  ); 

select が正しく出力されるように 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

2 つのテーブルに類似の列がない場合、どうすればこれらのテーブルを効果的に比較できますか? テーブルのフィールド値を呼び出して、SQL 例外をスローせずに null かどうかを確認できますか?

4

1 に答える 1

2

2 つのテーブルを比較するための列がないため、つまりデカルト積の後に行を除外できるものがないため、内部結合は目的を果たしません。2 つのマルチセットからレコードを選択して組み合わせるようなものです。T-SQL では、Union を次のように使用してこれを実現できます。

select 'authors' as [type]
       , city,state
       from authors
union 
select 'publishers' as [type]
       , city,state
       from publishers
于 2013-10-15T08:00:37.553 に答える