我在SQL中编写此Create视图语句时遇到问题。我想从一张桌子上获取人员ID,名字和姓氏,前往科罗拉多大学(uid = 2)。然后我想使用WITH子句将此表与我的body_composition表结合起来,并打印出body_composition表中的所有内容。以下是我正在进行的查询的确切定义。
首先,编写一个返回人名(pid),名字的查询 来自所有人的(fname)和姓氏(lname) 那些去科罗拉多大学的人。然后,将该查询放入 一个WITH子句并将其用作要组合的公用表表达式(CTE) 通过内部联接得到的身体组成表的结果 参加大学的人的身体成分 科罗拉多。
我尝试运行我的创建视图语句我收到此错误
错误:语法错误在或附近"什么"第7行:WITH what.body_composition为c
这是我的创建视图语句的代码以及我正在使用的表。
CREATE VIEW withclause AS
SELECT a.pid, a.fname, a.lname
FROM what.person AS a
INNER JOIN what.university AS b
on a.uid = b.uid
WHERE uid = 2
WITH what.body_composition AS c
SELECT *
FROM what.body_composition;
以下是我正在使用的三个表
Table "what.university"
Column | Type | Modifiers
-----------------+-----------------------+--------------------------------------
uid | integer | not null default nextval('university_uid_seq'::regclass)
university_name | character varying(50) |
city | character varying(50) |
Table "what.body_composition"
Column | Type | Modifiers
--------+---------+-----------
pid | integer | not null
height | integer | not null
weight | integer | not null
age | integer | not null
Table "what.person"
Column | Type | Modifiers
--------+-----------------------+-----------------------------------------------
pid | integer | not null default nextval('person_pid_seq'::reg class)
uid | integer |
fname | character varying(25) | not null
lname | character varying(25) | not null
答案 0 :(得分:2)
根据问题描述,我很确定这就是你想要的:
CREATE VIEW withclause AS
WITH cte AS (
SELECT p.pid, p.fname, p.lname
FROM what.person as p
INNER JOIN what.university as u
ON p.uid = u.uid
WHERE p.uid = 2
)
SELECT cte.pid, cte.fname, cte.lname, c.age, c.height, c.weight
FROM cte
INNER JOIN what.body_composition c on c.pid = cte.pid;
Sample SQL Fiddle(基于Postgres,我假设您正在使用基于psql标记)。