2014-10-30 129 views
0

我试图用4个表中的多个列创建表“USAGEFACT”。 我使用MS访问2013年 我得到的错误是只是简单的“在CREATE TABLE语法错误”SQL从多个表和列创建表

我使用的表是

FACT(Semester_ID,类标识码)。
类(Class_ID,Class_Description)。
学期(Semester_ID,Semester_Description)。
学生(Student_ID,Class_ID)。

*这些是不是唯一的列这些表

此刻,我有以下查询这是不正确的:

create table USAGEFACT as 
(select c.CLASS_DESCRIPTION, s.SEMESTER_DESCRIPTION, st.TYPE, st.SEX 
from FACT, CLASS as c, SEMESTER as s, STUDENT as st 
where FACT.CLASS_ID = c.CLASS_ID 
and s.SEMESTER_ID = FACT.SEMESTER_ID 
and c.CLASS_ID = st.CLASS_ID); 

我担心,我需要使用一个连接。我想也许我可以创建一组2个临时表,每个临时表包含两个已连接的表,然后将这两个临时表连接起来,这两个临时表分别由两个其他表创建。

深表谢意。

+0

为什么它不正确?你使用的是什么RDBMS。请添加标签。 – 2014-10-30 10:00:00

+0

在访问中,您必须使用SELECT INTO stametent。 – 2014-10-30 10:07:32

+0

但它*是*连接,虽然难以阅读。是否有关创建表并使用select语句填充它的问题(同时选择输出正是你需要的),或者你有选择本身的问题? – keltar 2014-10-30 10:08:24

回答

0

在MS Access不能使用CREATE TABLE as SELECTSELECT ... INTO声明

所以,我用明确JOIN符号进行进一步可读查询的

试试这个:

SELECT c.CLASS_DESCRIPTION as CLASS_DESCRIPTION, 
s.SEMESTER_DESCRIPTION as SEMESTER_DESCRIPTION, 
st.[TYPE] as ST_TYPE, st.SEX as SEX 
INTO USAGEFACT 
FROM FACT 
INNER JOIN CLASS as c 
    ON FACT.CLASS_ID = c.CLASS_ID 
INNER JOIN SEMESTER as s 
    ON s.SEMESTER_ID = FACT.SEMESTER_ID 
INNER JOIN STUDENT as st 
    ON c.CLASS_ID = st.CLASS_ID 
+0

使用INTO语句,如果没有这样的表存在,是否会创建表,或者您是否需要创建没有列的表,然后使用INTO语句添加这些列? – 2014-10-30 10:13:59

+0

select into与创建表的select命令相同。有了这个声明,你可以创建一个表(USAGEFACT),列c.CLASS_DESCRIPTION,s.SESESTER_DESCRIPTION,st.TYPE,st.SEX – 2014-10-30 10:15:24

+0

谢谢乔。您的解决方案有一个“FROM子句中的语法错误”。可能是因为表格“FACT”从来没有用过它的列,而只是在JOIN中调用? – 2014-10-30 10:19:39