2017-12-04 13 views
0

2つの異なるクエリで新しいビューを作成しようとしています。私はSQLに新しいですし、私は次のコードの構文エラーの原因となっているものを思ったんだけど:SQL:このCreate Viewスクリプトの構文エラーは何ですか? (初心者)

CREATE VIEW `License_Expiration` AS 

/* These queries show the license expiration date for retailers and 
processing facilities, sorted by soonest expiration date */ 

SELECT `Retailers`.`Retailer_Name`, `Retailers`.`Retail_License_Number`, 
`Retailers`.`Retal_License_Expiration` FROM `mydb2`.`Retailers` 
ORDER BY `Retailers`.`Retal_License_Expiration`; 

SELECT `Processing Facility`.`Facility_Name`, `Processing 
Facility`.`Facility_License_Num`, `Processing 
Facility`.`Facility_License_Exp` FROM `mydb2`.`Processing Facility` 
ORDER BY `Processing Facility`.`Facility_License_Exp`; 

構文エラーは、2番目のSELECTステートメントで発生します。「SELECTはこの位置で有効な入力ではありません」。私はSQL Workbenchを使用しています。どんな助けもありがとう!

編集: 解決策が解決しました。ありがとうございます!あなたが好きな Viewsを作成することができますいずれか

+0

最初の 'SELECT'を削除しようとしましたが、2番目の' SELECT'が動作するのか、それでもエラーが出るのか確認しましたか?また、ビュー内で2つのSELECT結果を返すことはできないと思いますか? – Edper

答えて

0

完了しました。 MySQL 5.7のドキュメントによると、ビューの構文は次のとおりです。

CREATE 
    [OR REPLACE] 
    [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}] 
    [DEFINER = { user | CURRENT_USER }] 
    [SQL SECURITY { DEFINER | INVOKER }] 
    VIEW view_name [(column_list)] 
    AS select_statement 
    [WITH [CASCADED | LOCAL] CHECK OPTION] 

あなたが2種類からのライセンスの有効期限を取得したい表示されますので - すなわち、小売店や施設 - おそらくあなたは可能性がありUNIONこれら2つのSELECT文とレコードが小売店や施設のためであるかどうかを示すCHAR列を持っています。 UNIONは、すべての列が同じ型であることを前提としています。

CREATE VIEW `License_Expiration` AS 

    /* These queries show the license expiration date for retailers and 
    processing facilities, sorted by soonest expiration date */ 

    (SELECT `Retailers`.`Retailer_Name`, AS Name, 
    `Retailers`.`Retail_License_Number` AS License_Number, 
    `Retailers`.`Retal_License_Expiration` AS License_Expiration, 'R' 
    AS Source_Type FROM `mydb2`.`Retailers`) 

    UNION 

    (SELECT `Processing Facility`.`Facility_Name`, AS Name, 
    `Processing Facility`.`Facility_License_Num` AS License_Number,  
    `Processing Facility`.`Facility_License_Exp` AS License_Expiration, 
    'F' AS Source_Type FROM `mydb2`.`Processing Facility`) 

    ORDER BY Name, License Expiration; 

これが役に立ちます。試してみます。

0

CREATE VIEW `License_Expiration_Retailer` AS 

/* These queries show the license expiration date for retailers and 
    processing facilities, sorted by soonest expiration date */ 

SELECT `Retailers`.`Retailer_Name`, 
`Retailers`.`Retail_License_Number`, 
`Retailers`.`Retal_License_Expiration` FROM `mydb2`.`Retailers` 
ORDER BY `Retailers`.`Retal_License_Expiration`; 


CREATE VIEW `License_Expiration_Processing_Facilities` AS 

SELECT `Processing Facility`.`Facility_Name`, `Processing 
Facility`.`Facility_License_Num`, `Processing 
Facility`.`Facility_License_Exp` FROM `mydb2`.`Processing Facility` 
ORDER BY `Processing Facility`.`Facility_License_Exp`; 

それとも Viewはマージ2:あなたが持っているとして、次の2つの独立したSELECTステートメントでビューを作成することはできません

CREATE VIEW `License_Expiration` AS 

/* These queries show the license expiration date for retailers and 
    processing facilities, sorted by soonest expiration date */ 

SELECT "Retailer" as License_Type, `Retailers`.`Retailer_Name` as Owner_Name, 
`Retailers`.`Retail_License_Number` as License_Number, 
`Retailers`.`Retal_License_Expiration` as Lincense_Expiration_Date FROM `mydb2`.`Retailers` 
ORDER BY `Retailers`.`Retal_License_Expiration`; 

UNION ALL 

SELECT "Processing Facility" as License_Type, 
`Processing Facility`.`Facility_Name` as OwnerName, `Processing 
Facility`.`Facility_License_Num` as License_Number, `Processing 
Facility`.`Facility_License_Exp` as Lincense_Expiration_Date 
FROM `mydb2`.`Processing Facility` 
ORDER BY `Processing Facility`.`Facility_License_Exp`; 
1

私は、ビュー内で複数の選択肢を取得してビューを作成することはできません。それでも2つの選択肢のすべての列が必要な場合は、これらの2つの表を結合し、必要な列を含むビューを作成するか、要件に従って結合を作成してください。

関連する問題