SQLでif/elseを使用することは可能ですか?supplier
列で呼び出されるテーブルがある場合: sid
->主キー、sname
およびcity
。
それから私はしたい:
select sid from supplier where city="taipei"
空でない場合。- または
select sid from supplier where city="tainan"
はい、できます。他の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
あなたが何をしたいのかはっきりしていませんでした(私は以前の仮説を以下に残します)。
サプライヤに優先度を関連付けて、台北の優先度が選択されるようにしますが、それが利用できない場合は、代わりに台南が選択されます。
この特定のケースでは、次を使用できます。
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 != '';
以下は、台北にある場合はサプライヤーを選択し、そうでない場合は台南にあるサプライヤーを選択します。それらのいずれも存在しない場合、何も返されません。
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')