2017-12-04 16 views
0

Ich versuche, eine neue Ansicht mit zwei verschiedenen Abfragen zu erstellen. Ich bin neu in SQL und ich frage mich, was für den folgenden Code den Syntaxfehler verursacht:SQL: Was ist der Syntaxfehler in diesem Create View-Skript? (Anfänger)

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

Die Syntaxfehler tritt in der zweiten SELECT-Anweisung: „SELECT an dieser Position keine gültige Eingabe ist“. Ich benutze SQL Workbench. Jede Hilfe wird geschätzt!

EDIT: Ihre Lösungen haben es gelöst, danke für Ihre Hilfe!

+0

Haben Sie versucht, das 1. SELECT zu entfernen und zu sehen, ob das 2. SELECT funktioniert oder immer noch einen Fehler verursacht? Auch glaube ich nicht, dass Sie zwei SELECT-Ergebnisse in einer Ansicht zurückgeben könnten? – Edper

Antwort

0

Sie nicht eine Ansicht mit zwei unabhängigen SELECT-Anweisungen erstellen, wie Sie erledigt. Gemäß der MySQL 5.7-Dokumentation lautet die Syntax für eine Ansicht wie folgt.

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] 

Da es scheint, dass Sie Ablauf der Lizenz von zwei Arten erhalten wollen - nämlich Einzelhändler und Einrichtungen - vielleicht könnten Sie UNION diesen beiden SELECT-Anweisungen und haben eine CHAR-Spalte ab, der angibt, ob der Datensatz für einen Händler oder Anlage ist . Die UNION geht davon aus, dass alle Spalten vom selben Typ sind.

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; 

Hoffe, das hilft. Versuch es einmal.

0

Sie entweder schaffen könnten zweiViews wie:

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

Oder einView Verschmelzung der beiden:

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

Wie ich denke, Sie können nicht mehr als eine Auswahl innerhalb der Abfrage, um eine Ansicht zu erstellen. Wenn Sie immer noch alle Spalten der beiden Selektionen möchten, verbinden Sie diese beiden Tabellen und erstellen Sie eine Ansicht mit den erforderlichen Spalten, oder Sie können eine Verknüpfung entsprechend der Anforderung erstellen.

Verwandte Themen