列が存在するかどうかを確認できる必要があります。存在する場合は、そこからSELECTします。
いろいろなバリエーションを試していますが、それが可能かどうかさえわかりません。
これが私の最新の試みです:
SELECT
IF (EXISTS (SELECT `Period` AS `Period` FROM myview), `PERIOD`,
IF (EXISTS (SELECT `Country` AS `COUNTRY` FROM myview),`COUNTRY` FROM myview ;
何か案は?
編集
私はここで他の質問を見ました: MySQL、SQLのテーブルに列が存在するかどうかを確認してください
しかし、私はまだifステートメントに苦労しています。上記の質問の回答を使用して、列が存在するかどうかを確認できます。しかし、私の質問は、結果がtrueであることが判明した場合に、その列からselectステートメントを実行する方法です。
編集2
以下の答えは、BEGINステートメントとENDステートメントを使用する必要があることを示しています。これは理にかなっています。しかし、私のクエリは最初の行で文句を言います。 「予期しないIF」と表示されます-これがMYSQLの正しい構文であるかどうかを誰かが確認できますか?
if( exists (SELECT *
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = 'db_name'
AND TABLE_NAME = 'view_name'
AND COLUMN_NAME = 'column_name') )
begin
SELECT `column_name` FROM `view_name`
end
前もって感謝します。
このクエリは、列が存在するかどうかを示します。
SELECT *
FROM information_schema.COLUMNS
WHERE
TABLE_SCHEMA = 'db_name'
AND TABLE_NAME = 'table_name'
AND COLUMN_NAME = 'column_name'
一部の列が存在するかどうかを確認する場合は、selectステートメントを実行して、最初に列が存在することを確認する必要があります。次に、選択を実行します。
if (exists (SELECT * FROM information_schema.COLUMNS WHERE TABLE_NAME = 'myview' AND COLUMN_NAME = 'Period') and exists (SELECT * FROM information_schema.COLUMNS WHERE TABLE_NAME = 'myview' AND COLUMN_NAME = 'Country'))
begin
select `Period`, `Country` from myview
end
IF条件が真の場合、BEGINとEND内ですべてを実行します。
ユーザーがアップロードしたシートによって作成されたいくつかの製品テーブルがあるのと同じ状況に遭遇しました。シートに「廃止」という名前の列がない場合があったため、シートからすべての製品をインポートする必要がありましたが、廃止された製品はインポートしませんでした。
尋ねられた元の質問に基づいてクエリを変更していませんが、これが私の解決策です:
SELECT
t2.model,
(
SELECT
COUNT(*) AS _count
FROM db.table t1
WHERE
`obsolete`=1
AND t1.model=t2.model
) AS `obsolete`
FROM (
SELECT
0 AS `obsolete`,
t3.model
FROM db.table t3
) t2
このクエリには、2つの最も重要な部分があります。
obsolete
を選択しています。