ОШИБКА SQL ORA-00923: ключевое слово FROM не найдено там, где ожидалось

#sql #oracle

Вопрос:

 SELECT Person_ID, CONCAT('First_name','Surname') AS "Person_Name", Next_of_kin, '~ No next of kin ~' AS Next_of_kin_name, Next_of_kin_age AS NULL  
FROM PERSON  
WHERE Next_of_kin IS NULL
UNION
SELECT Childs.Person_ID, CONCAT('Childs.First_name','Childs.Surname') AS "Person_name", Next_of_kin, CONCAT('Fathers.First_name','Fathers.Surname') AS "Next_of_kin_name",TO_CHAR(sysdate, 'YYYY') - TO_CHAR(Fathers.birth_date, 'YYYY')
(TO_CHAR(sysdate, 'YYYY')- TO_CHAR(Birth_date, 'YYYY')) AS Next_of_kin_age 
FROM Person Childs, Person Fathers
WHERE Childs.next_of_kin = Fathers.Person_ID
AND TO_CHAR(sysdate, 'YYYY') - TO_CHAR(Fathers.birth_date, 'YYYY') >= 50;
 

Комментарии:

1. NULL это зарезервированное слово ( en.wikipedia.org/wiki/SQL_reserved_words ), и не может использоваться в качестве псевдонима столбца. Выберите другой псевдоним или разделите как "NULL" .

2. Во втором списке выбора также отсутствует запятая или что-то еще.

Ответ №1:

  • Имя последнего столбца возвращено как NULL , но на самом деле вы хотите вернуть значение как NULL для Next_of_kin_age .
  • Кроме того, вы пропустили оператор в последнем столбце второго выбора, я предположил, что оператор минус.

    TO_CHAR(дата рождения, ‘ГГГГ’) — TO_CHAR(Дата рождения, ‘ГГГГ’) (TO_CHAR(дата рождения, ‘ГГГГ’)- TO_CHAR(Дата рождения, ‘ГГГГ’)) КАК Next_of_kin_age

Попробуйте Это

 SELECT Person_ID, 
       CONCAT('First_name','Surname') AS "Person_Name", 
       Next_of_kin, 
       '~ No next of kin ~' AS Next_of_kin_name, 
       NULL AS Next_of_kin_age 
FROM PERSON  
WHERE Next_of_kin IS NULL
UNION
SELECT Childs.Person_ID, 
       CONCAT('Childs.First_name','Childs.Surname') AS "Person_name", 
       Next_of_kin, 
       CONCAT('Fathers.First_name','Fathers.Surname') AS "Next_of_kin_name",
       TO_CHAR(sysdate, 'YYYY') - TO_CHAR(Fathers.birth_date, 'YYYY') - (TO_CHAR(sysdate, 'YYYY') - TO_CHAR(Birth_date, 'YYYY')) AS Next_of_kin_age 
FROM Person Childs, Person Fathers
WHERE Childs.next_of_kin = Fathers.Person_ID
AND TO_CHAR(sysdate, 'YYYY') - TO_CHAR(Fathers.birth_date, 'YYYY') >= 50;