3

SQLでif/elseを使用することは可能ですか?supplier列で呼び出されるテーブルがある場合: sid->主キー、snameおよびcity

それから私はしたい:

  1. select sid from supplier where city="taipei"空でない場合。
  2. またはselect sid from supplier where city="tainan"
4

3 に答える 3

4

はい、できます。他のDBMSについては知りませんが、MicrosotSQLServerのストアドプロシージャでこのようなものを使用しました。

IF EXISTS
   (SELECT [sid] FROM [supplier]  WHERE [city]= "taipei")

select sid from supplier where city="taipei"  // your true condition query
ELSE
select sid from supplier where city="tainan"

MySQLの場合このリンクから、それも可能であることがわかります。見る;

IF EXISTS(SELECT * FROM tbl_name WHERE category_code ='some-category-code') THEN UPDATE tbl_name SET active='0' WHERE category_code = 'some-category-code' END IF
于 2012-08-21T09:33:52.783 に答える
1

あなたが何をしたいのかはっきりしていませんでした(私は以前の仮説を以下に残します)。

サプライヤに優先度を関連付けて、台北の優先度が選択されるようにしますが、それが利用できない場合は、代わりに台南が選択されます。

この特定のケースでは、次を使用できます。

SELECT sid FROM supplier WHERE city = (
    SELECT MAX(city) FROM supplier WHERE city IN ('Taipei', 'Tainan')
);

内側のサブSELECTは、台北、または利用できない場合は台南を取得します。

これは、台北が台南より辞書式に大きいという事実を使用していますが、より柔軟なソリューションが必要な場合、MAXは機能しません。その場合、副選択を変更して、都市を望ましい順に並べ替えてから(もちろん、失われた都市は望ましくありません)、最も望ましい都市を取得します。

SELECT sid FROM supplier WHERE city = (
    SELECT city FROM supplier ORDER BY CASE
        WHEN city = 'Taipei' THEN 1
        WHEN city = 'Tainan' THEN 2
        WHEN city = 'New York' THEN 3
        ELSE 4
     END
     LIMIT 1
);

副選択は最初の台北を取得しますが、台北がない場合は台南などに到達します。

SIDが1つだけ必要な場合は、はるかに簡単に実行できることに注意してください。

SELECT sid FROM supplier ORDER BY CASE
        WHEN city = 'Taipei' THEN 1
        WHEN city = 'Tainan' THEN 2
        WHEN city = 'New York' THEN 3
        ELSE 4
     END
     LIMIT 1

これによりすべてのサプライヤが取得されますが、利用可能な場合は台北からのサプライヤが最初に出てきます。LIMIT 1は、その最初の行への応答を切り捨てます。

以下の解決策は適用されません

これは、都市が台北または台南であるサプライヤーからsidを取得します(もちろん、都市が空ではないことを意味します!):

SELECT sid FROM supplier WHERE city IN ('Taipei', 'Tainan');

sidが空でない場合、これは上記のようにサプライヤーからsidを取得します。

SELECT sid FROM supplier WHERE city IN ('Taipei', 'Tainan') AND sid IS NOT NULL;

これにより、上記のようにサプライヤーからsidが取得され、空の場合はsidが置き換えられます。

SELECT CASE WHEN sid IS NULL then 'Empty' ELSE sid END AS sid
    FROM supplier WHERE city IN ('Taipei', 'Tainan');

たぶん、期待される結果で2つまたは3つのサンプル行を提供する必要があります。

編集:申し訳ありませんが、sidが主キーであることがわかりました。つまり、空になることはありません。これは、ケース2と3が適用できないことを意味します。

それなら、おそらくあなたはsnameが空ではないということですか?:

SELECT sid FROM supplier WHERE city IN ('Taipei', 'Tainan')
    AND sname IS NOT NULL AND sname != '';
于 2012-08-21T09:30:06.230 に答える
0

以下は、台北にある場合はサプライヤーを選択し、そうでない場合は台南にあるサプライヤーを選択します。それらのいずれも存在しない場合、何も返されません。

select sid
from supplier
where city = 'Taipei'

union all

select sid
from supplier
where city = 'Tainan' 
  and not exists (select 1 from supplier where city = 'taipei')
于 2012-08-21T09:38:49.053 に答える