1

I try to solve this problem https://www.hackerrank.com/challenges/placements/problem the following code jumps with error

CREATE VIEW T AS (
SELECT STUDENTS.ID ,STUDENTS.NAME,PACKAGES.SALARY,FRIENDS.FRIEND_ID
FROM STUDENTS JOIN FRIENDS ON STUDENTS.ID=FRIENDS.ID
    JOIN PACKAGES ON STUDENTS.ID=PACKAGES.ID
);
CREATE VIEW T2 AS (
SELECT T.NAME
FROM  T JOIN PACKAGES ON T.FRIEND_ID=PACKAGES.ID
WHERE T.SALARY<PACKAGES.SALARY
ORDER BY PACKAGES.SALARY;
);
SELECT *
FROM T2;

But this

CREATE VIEW T AS (
SELECT STUDENTS.ID ,STUDENTS.NAME,PACKAGES.SALARY,FRIENDS.FRIEND_ID
FROM STUDENTS JOIN FRIENDS ON STUDENTS.ID=FRIENDS.ID
    JOIN PACKAGES ON STUDENTS.ID=PACKAGES.ID
);

SELECT T.NAME
FROM  T JOIN PACKAGES ON T.FRIEND_ID=PACKAGES.ID
WHERE T.SALARY<PACKAGES.SALARY
ORDER BY PACKAGES.SALARY;

works. why is that? Is that due to I create more than 1 view or something else?

2
  • 1
    . .. What is the error that you get? Commented Jul 20, 2020 at 1:54
  • OK, I switch to 'CREATE VIEW T AS ( SELECT STUDENTS.ID ,STUDENTS.NAME,PACKAGES.SALARY,FRIENDS.FRIEND_ID FROM STUDENTS JOIN FRIENDS ON STUDENTS.ID=FRIENDS.ID JOIN PACKAGES ON STUDENTS.ID=PACKAGES.ID ); CREATE VIEW T2 AS ( SELECT T.NAME, PACKAGES.SALARY AS FS FROM T JOIN PACKAGES ON T.FRIEND_ID=PACKAGES.ID WHERE T.SALARY<PACKAGES.SALARY ); SELECT NAME FROM T2 ORDER BY FS;' It seems that works. Is there any difference between table and view? Such as some commends are allowed in table but not view like order by? Commented Jul 20, 2020 at 1:57

1 Answer 1

1

Try dropping the parentheses:

CREATE VIEW T AS 
    SELECT S.ID, S.NAME, P.SALARY, F.FRIEND_ID
    FROM STUDENTS S JOIN
        FRIENDS F
        ON S.ID = F.ID JOIN
        PACKAGES P
        ON S.ID = P.ID;

CREATE VIEW T2 AS
    SELECT T.NAME
    FROM T JOIN 
         PACKAGES P
         ON T.FRIEND_ID = P.ID
    WHERE T.SALARY < P.SALARY
    ORDER BY P.SALARY;

You will note that I introduced table aliases so the queries are easier to write and to read.

The parentheses are not part of the CREATE VIEW syntax, so the query is interpreted as a subquery. I think that throws off the interpretation of the ORDER BY.

Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.