2

私は SQL の初心者で、このかなり簡単な条件付きの問題があります。データベース内のすべてのインストール番号には顧客がいます。しかし、顧客は AUDEB テーブルまたは AFORD テーブルのいずれかに属していると言われました。最初に AUDEB で CUSTOMER_NO を調べ、それが NULL でない場合はそれを使用する必要があります。NULL の場合は、AFORD テーブルから CUSTOMER_NO を取得します。

CUSTOMER_NO が NULL でない場合に使用します

  SELECT CUSTOMER_NO
  FROM AUDEB
  WHERE INST_NO = 2

それ以外の場合は、この CUSTOMER_NO を使用します

  SELECT CUSTOMER_NO
  FROM AFORD
  WHERE INST_NO = 2

SQL に IF...ELSE 条件が存在することがわかりますが、結果が null でない場合は最初のクエリを使用し、そうでない場合は他のクエリを使用する 2 つのクエリから値を選択する簡単な方法はありませんか?

4

3 に答える 3

3

unionサブクエリを使用してテーブルを検索し、顧客の完全なリストを取得できます。

select  CUSTOMER_NO
from    (
        select  CUSTOMER_NO
        ,       INST_NO
        from    AUDEB
        union all
        select  CUSTOMER_NO
        ,       INST_NO
        from    AFORD
        ) as all_customers
where   INST_NO = 2
于 2012-06-27T07:08:06.043 に答える
2

2 つのテーブルが同じスキーマに従っており、customrer_no に重複がない場合は、UNION を使用できます。

SELECT T.CUSTOMER_NO
  FROM (SELECT CUSTOMER_NO, INST_NO FROM AUDEB
        UNION
        SELECT CUSTOMER_NO, INST_NO FROM AFORD) AS T
  WHERE T.INST_NO = 2

または、inst_no が両方のテーブルにある可能性がある場合は、それらを結合します (スキーマが異なっていても)。

SELECT COALESCE(T1.Customer_no, T2.CUSTOMER_NO)
FROM AUDEB as T1
FULL OUTER JOIN AFORD as T2
ON T1.INST_NO = T2.INST_NO
WHERE T1.INST_NO = 2 OR T2.INST_NO = 2

COALESCE は、null 以外の最初の結果を返します。

于 2012-06-27T07:14:09.750 に答える
1

両方のテーブルを結合し、ISNULL() を使用して対応するテーブルから値を取得するだけです。

SELECT ISNULL(A.CUSTOMER_NO, B.CUSTOMER_NO) AS CUSTOMER_NO
  FROM AUDEB A INNER JOIN AFORD B
    ON A.INST_NO = B.INST_NO
 WHERE A.INST_NO = 2

編集:これは INST_NO が主キーであると想定していますが、現在はそうではないことがコメントで述べられています。OP は正しいフィールドを使用して、この 2 つのテーブルを結合する必要があります。

于 2012-06-27T07:09:24.470 に答える