繁体   English   中英

在SQL中使用表作为变量

[英]Use a Table as a Variable in SQL

我有两个桌子教室和一台计算机,目前桌子教室中的计算机是变量

CREATE TABLE classroom_tbl
(
   room_id        INT AUTO_INCREMENT PRIMARY KEY,
   teacher_name   VARCHAR(30),
   subject_name   VARCHAR(30),
   computer       VARCHAR(30)
); 

我想做到这一点,因此可变计算机代替教室表中的VARCHAR,而将其称为计算机表

CREATE TABLE computer_tbl
(
   computer_id       INT AUTO_INCREMENT PRIMARY KEY,
   computer_type     VARCHAR(30),
   computer_status   INT
);

有什么办法吗? 我尝试了UNION和INNER JOIN,但总是收到一个错误消息,指出我的列大小不同。 这是有道理的,因为教室比计算机大。 谢谢你提供的所有帮助!

我相信您是SQL的新手,并且具有一定的编程经验。 SQL没有像C / C ++ / java这样的编程语言中的变量。 相反,SQL表通过诸如外键关系之类的关系相互关联。 您需要阅读SQL教程以了解有关关系的更多信息,这是其中之一的链接:

http://www.functionx.com/sql/Lesson11.htm

为了使用JOINS,您需要在两个表之间具有主-外键关系。 您可能需要像这样创建表:

CREATE TABLE classroom_tbl
(
   room_id        INT AUTO_INCREMENT PRIMARY KEY,
   teacher_name   VARCHAR(30),
   subject_name   VARCHAR(30),
   computer_id    INT REFERENCES computer_tbl(computer_id)
);

由于给定的教室中可以有许多计算机,但是给定的计算机一次只能位于一个教室中,因此将教室作为外键放在计算机桌上更有意义,反之亦然:

CREATE TABLE classroom_tbl
(
   room_id        INT AUTO_INCREMENT PRIMARY KEY,
   teacher_name   VARCHAR(30),
   subject_name   VARCHAR(30)
); 

CREATE TABLE computer_tbl
(
   computer_id       INT AUTO_INCREMENT PRIMARY KEY,
   computer_type     VARCHAR(30),
   computer_status   INT,
   room_id           INT
);

要查看每个房间中有哪些计算机,请尝试以下查询:

select r.room_id, r.teacher_name, r.subject_name,
       c.computer_id, c.computer_type, c.computer_status
from classroom_tbl r
left join computer_tbl c on r.room_id = c.room_id

如果有人遇到这个问题,我想做的事是不可能的。 您只能引用其他表中的其他列或创建前键。 不幸的是,您不能引用整个表。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM