[解決済み] MySQL select statement with CASE or IF ELSEIF? 結果を取得する方法がわからない
質問
2つのテーブルがあります。 1つはメーカー情報を持ち、販売可能な地域を含んでいます。 もう1つは、販売用の製品を持っています。 地域に基づいて製品の可視性を制限する必要があります。 これは、Netflix が、どこでも (1)、カナダ (2)、米国 (3) でしか見ることができないビデオをシステム内に持っているようなものです。
私は、製造者テーブルの設定に基づいて、製品がどこで見ることができるかを教えてくれるクエリを作ろうとしています。
たとえば、製造者テーブルには、expose_new と expose_used という 2 つのフィールドがあり、それぞれ 1,2 または 3 の値を持って、新しいビデオまたは使用済みのビデオを見ることができる場所を制限することができます。
動画が追加されるとき、「expose」値は割り当てられません。これは、現在のメーカーのexpose_newまたはexpose_usedの値に応じて、インデックスに動画を追加するときにその場で行われることを意味します。
私が取得しようとしているのは、アイテムの詳細と、新品か中古品かに基づいて見ることができる場所の計算された値、およびすべての新品または中古品のためにメーカーに割り当てられたルール/値です。 私はリストに条件付きで表示するために、製品ごとにこの一桁の数字が必要です。
以下はうまくいきませんが、私がやろうとしていることのアイデアを得ることができます。 私はこれを CASE ステートメントと次の WRONG IF/ELSEIF ステートメントで試してみました。
これをデバッグし、正しい方向に私を導くためのいかなる助けも感謝されます。
SELECT
t2.company_name,
t2.expose_new, // 1,2 or 3
t2.expose_used, // 1,2 or 3
t1.title,
t1.seller,
t1.status, //can be new or used
(SELECT
IF(status ='New',
(select expose_new from manufacturers where id = t1.seller),1
)
ELSEIF(t1.status ='Used',
(select expose_used from manufacturers where id = t1.seller),1
)
END IF
) as 'expose'
FROM `products` t1
join manufacturers t2 on t2.id = t1.seller
where t1.seller = 4238
ここでは、実際に実行されているように見えるCASEバージョンですが、何が起こるか真であるかにかかわらず、常に最初の値(この場合、1)で結果を出します。 私は、各WHENステートメントでANDを持つ別のテストの追加を持つことができるかどうかわかりませんが、それはエラーを与えず、間違った結果だけを出します。
SELECT
t2.company_name,
t2.expose_new,
t2.expose_used,
t1.title,
t1.status,
CASE status
when 'New' and t2.expose_new = 1 then 1
when 'New' and t2.expose_new = 2 then 2
when 'New' and t2.expose_new = 3 then 3
when 'Used' and t2.expose_used = 1 then 1
when 'Used' and t2.expose_used = 2 then 2
when 'Used' and t2.expose_used = 3 then 3
END as expose
FROM `products` t1
join manufacturers t2 on t2.id = t1.seller
where t1.seller = 4238
どのように解決するのですか?
このクエリを試してみてください。
SELECT
t2.company_name,
t2.expose_new,
t2.expose_used,
t1.title,
t1.seller,
t1.status,
CASE status
WHEN 'New' THEN t2.expose_new
WHEN 'Used' THEN t2.expose_used
ELSE NULL
END as 'expose'
FROM
`products` t1
JOIN manufacturers t2
ON
t2.id = t1.seller
WHERE
t1.seller = 4238
関連
-
[解決済み] How to make the first option of <select> selected with jQuery
-
[解決済み] MySQLでコマンドラインを使用してSQLファイルをインポートするにはどうすればよいですか?
-
[解決済み] MySQLでコマンドラインを使用してユーザーアカウントのリストを取得するにはどうすればよいですか?
-
[解決済み] MySQLデータベースのテーブルのサイズを取得する方法は?
-
[解決済み] MySQLで'insert if not exists'を行うにはどうしたらいいですか?
-
[解決済み] MySQL で特定のカラム名を持つすべてのテーブルを見つけるにはどうすればよいですか?
-
[解決済み] MYSQLでMAX(列の値)、PARTITIONで別の列で行を選択するにはどうすればよいですか?
-
[解決済み] mysqlデータベースのサイズを取得する方法は?
-
[解決済み] SQL Server の CASE ステートメントで OR がサポートされていない。
-
[解決済み】MySQL:SELECT文は大文字と小文字を区別する?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
ジョイントインデックスのためのmysqlの条件とインデックスが失敗するための条件
-
mysqlにおけるvarcharの日付比較とソートの実装
-
MySQLデータベースでvarchar型の数値の大きさを比較する方法
-
SQL基本クエリステートメント
-
MySql認証ベースのvsftpd仮想ユーザー
-
[解決済み】DynamoDB : 提供されたキー要素がスキーマと一致しません。
-
MySQLにおけるvarchar型とchar型の違い
-
Mysql がエラーを報告 オペランドには 1 つのカラムが含まれている必要があります。
-
Djangoマイグレーションエラー 外部キー制約を追加できない
-
[解決済み] どのトランザクションが「テーブルメタデータのロック待ち」状態を引き起こしているかを確認するにはどうすればよいですか?