Oracle SQL - взгляды - PullRequest
       1

Oracle SQL - взгляды

0 голосов
/ 16 ноября 2018

Это оригинальный код:

    WITH counter(id, total) AS (
    SELECT stu.studentid AS "ID", count(stu.studentid) AS "Count of 
    Placement"
    FROM tn.student stu
    JOIN tn.event_result e on stu.studentid = e.studentid
    WHERE stu_sex = 'M' AND finalplacement = 1 
    GROUP BY stu.studentid )
    SELECT stu_firstname AS "First Name", stu_lastname AS "Last Name", 
    stu_sex AS "Sex", 
    stu_phonenumber AS "Phone Number", total AS "Count of Placement"
    FROM tn.student S
    JOIN counter
    ON counter.id = s.studentid
    ORDER BY total DESC;

Это представление, созданное путем удаления stu_sex = 'm':

    CREATE VIEW Lubeina_view AS
    WITH counter(id, total) AS (
    SELECT stu.studentid AS "ID", count(stu.studentid) AS "Count of Placement"
    FROM tn.student stu
    JOIN tn.event_result e on stu.studentid = e.studentid
    WHERE finalplacement = 1 
    GROUP BY stu.studentid )
    SELECT stu_firstname AS "First Name", stu_lastname AS "Last Name", stu_sex 
    AS "Sex", 
    stu_phonenumber AS "Phone Number", total AS "Count of Placement"
    FROM tn.student S
    JOIN counter
    ON counter.id = s.studentid
    ORDER BY total DESC;

Привет, ребята, я работаю с Oracle SQL.Я пытаюсь вывести это с помощью VIEWS:

ORACLE SQL

Проблема в том, что я не могу написатькоманда, которая выводит только пол M пол или F пол

Я пытался использовать это:

SELECT * 
FROM lubeina_view 
WHERE stu_sex = 'M';

Но я получил сообщение об ошибке:

Неверный идентификатор,

Пожалуйста, помогите!Я не уверен, какая команда выведет данные, показанные на рисунке

1 Ответ

0 голосов
/ 16 ноября 2018

Код SQL в вопросе использует stu_sex AS "Sex", и позже вы используете запрос:

select * from Lubeina_view where sex = 'M'

, который не удался, но если вы используете:

select * from Lubeina_view where "Sex" = 'M'

, это будет работать.

Проблема, которую я считаю, заключается в чувствительности к регистру.В Oracle, если вы определяете имя столбца с кавычками, оно становится чувствительным к регистру.Я настоятельно рекомендую вам не использовать пробелы в именах столбцов и НЕ использовать кавычки.

CREATE VIEW Lubeina_view
AS
WITH counter (id, total)
AS (
    SELECT
        stu.studentid          AS ID
      , COUNT( stu.studentid ) AS Count_of_Placement
    FROM tn.student stu
    JOIN tn.event_result e ON stu.studentid = e.studentid
    WHERE finalplacement = 1
    GROUP BY
        stu.studentid
)
SELECT
    stu_firstname   AS First_Name
  , stu_lastname    AS Last_Name
  , stu_sex         AS Sex
  , stu_phonenumber AS Phone_Number
  , total           AS Count_of_Placement
FROM tn.student S
JOIN counter ON counter.id = s.studentid
;

Теперь вы можете использовать where sex = 'M' или where Sex = 'M' или where sEx = 'M'

Также призываю васНЕ включать order by в представлениях.


CREATE TABLE student(
   stu_firstname   VARCHAR(7) NOT NULL PRIMARY KEY
  ,stu_lastname    VARCHAR(5) NOT NULL
  ,stu_sex         VARCHAR(2) NOT NULL
  ,stu_phonenumber VARCHAR(9) NOT NULL
  ,total           INTEGER  NOT NULL
);
INSERT INTO student(stu_firstname,stu_lastname,stu_sex,stu_phonenumber,total) VALUES ('fiendis','plan','M','555 1234',100);
CREATE VIEW Lubeina_view
AS
SELECT
    stu_firstname   AS First_Name
  , stu_lastname    AS Last_Name
  , stu_sex         AS "Sex"
  , stu_phonenumber AS Phone_Number
  , total           AS Count_of_Placement
FROM student
;
select
*
from Lubeina_view
where sex = 'M'
;
ORA-00904: "SEX": invalid identifier
select
*
from Lubeina_view
where "Sex" = 'M'
;
FIRST_NAME | LAST_NAME | Sex | PHONE_NUMBER | COUNT_OF_PLACEMENT
:--------- | :-------- | :-- | :----------- | -----------------:
fiendis    | plan      | M   | 555 1234     |                100
CREATE VIEW Lubeina_view_2
AS
SELECT
    stu_firstname   AS First_Name
  , stu_lastname    AS Last_Name
  , stu_sex         AS Sex
  , stu_phonenumber AS Phone_Number
  , total           AS Count_of_Placement
FROM student
;
select
*
from Lubeina_view_2
where seX = 'M'
;
FIRST_NAME | LAST_NAME | SEX | PHONE_NUMBER | COUNT_OF_PLACEMENT
:--------- | :-------- | :-- | :----------- | -----------------:
fiendis    | plan      | M   | 555 1234     |                100
select
*
from Lubeina_view_2
where sEx = 'M'
;
FIRST_NAME | LAST_NAME | SEX | PHONE_NUMBER | COUNT_OF_PLACEMENT
:--------- | :-------- | :-- | :----------- | -----------------:
fiendis    | plan      | M   | 555 1234     |                100

дБ <> скрипка здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...