【发布时间】:2014-06-24 07:14:10
【问题描述】:
我有两个表,一个 STUDENT 和一个 RULES 表。学生表保存与学生相关的数据,规则表保存与特定学生相关的规则。 现在在学生表上,我有 5 列作为规则表的外键,例如
CREATE TABLE dbo.RULES
(
ID int identity not null primary key,
RULENAME varchar
)
CREATE TABLE dbo.STUDENT
(
ID int identity not null primary key,
NAME varchar(50),
SURNAME varchar(50),
ADRESS varchar(50),
RULE1 int not null references dbo.RULES(ID),
RULE2 int not null references dbo.RULES(ID),
RULE3 int not null references dbo.RULES(ID),
RULE4 int not null references dbo.RULES(ID),
RULE5 int not null references dbo.RULES(ID)
)
我想要实现的是从学生表中选择 NAME、SURNAME、ADDRESS 并将其与 STUDENT 中每个 RULE 外键的 RULENAME 连接起来,例如
NAME SURNAME ADDRESS RULE1NAME RULE2NAME RULE3NAME RULE4NAME RULE5NAME
我整晚都在努力破解这个问题,但遗憾的是我仍然在第一方。我将这归因于我缺乏 SQL 经验,但是,有漂亮的人可以帮帮我吗?
更新
感谢你们的回答,dotnetom、Bharadwaj。
我按照 dotnetoms 答案的建议加入了 5 次。该查询工作正常,但它为所有五个规则返回相同的规则。这是我的查询
SELECT
STUDENT.NAME,
STUDENT.SURNAME,
STUDENT.ADDRESS,
RULES.RULENAME AS RULE1NAME,
RULES.RULENAME AS RULE2NAME,
RULES.RULENAME AS RULE3NAME,
RULES.RULENAME AS RULE4NAME,
RULES.RULENAME AS RULE5NAME
FROM STUDENT s
INNER JOIN RULES AS r1 ON STUDENT.RULE1 = RULES.ID
INNER JOIN RULES AS r2 ON STUDENT.RULE2 = RULES.ID
INNER JOIN RULES AS r3 ON STUDENT.RULE3 = RULES.ID
INNER JOIN RULES AS r4 ON STUDENT.RULE4 = RULES.ID
INNER JOIN RULES AS r5 ON STUDENT.RULE5 = RULES.ID
有什么建议吗?谢谢!
【问题讨论】:
-
这是 MySQL 还是 SQL Server 的问题?
-
您已将此标记为mysql 和 sql-server。那是两种不同的产品。您是否打算同时标记两者?此外,当您有 multiple 列仅由数字区分时,这通常是 SQL 中的一种设计味道 - 学生与规则的绑定可能应该是 separate 多对-许多表有尽可能多的行。
-
一个 SQL Server 问题。抱歉,我应该以某种方式指定吗?
-
重新标记........新手错误
-
规则表可以
left join5次。
标签: sql sql-server database