2017-12-04 24 views
0

두 개의 서로 다른 쿼리를 사용하여 새보기를 만들려고합니다. 나는 SQL에 새로운 오전 나는 다음과 같은 코드를 구문 오류의 원인이 무엇인지 궁금하네요 :SQL :이 Create View 스크립트의 구문 오류는 무엇입니까? (Beginner)

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`; 

구문 오류가 두 번째 SELECT 문에서 발생 : "SELECT이 위치에 유효한 입력하지 않습니다." 나는 SQL Workbench를 사용하고있다. 어떤 도움을 주셔서 감사합니다!

편집 : 해결책이 해결되었습니다. 감사합니다. 당신이 좋아하는 Views를 만들 수 있습니다 중 하나

+0

첫 번째'SELECT'을 제거하고 두 번째'SELECT'가 작동하는지 또는 여전히 오류가 발생했는지 확인해 보셨습니까? 또한보기에서 두 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] 

당신이 두 가지 유형의 라이센스 만료를 얻고 싶은 보이므로 - 레코드가 소매 또는 시설에 대한 경우 아마도 그럴 수 UNION이 두 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 병합 두 : 당신이 가지고있는 당신은 두 개의 독립적 인 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

생각한 것처럼 쿼리를 만들면 뷰를 만들 수 없습니다. 두 선택 항목의 모든 열을 계속 표시하려면이 두 테이블을 조인하고 필요한 열이있는보기를 만들거나 요구 사항에 따라 합집합을 만들 수 있습니다.