2014-06-24 31 views
2

)在外键表(TABLE B)中选择一个非ID列(我有两张表,STUDENT和RULES表)学生表保存与学生和规则相关的数据表保存与特定学生的规则。 现在对学生的表,我有5列作为外键的规则表如根据主表中的外键(TABLE

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) 
) 

我想实现的是从学生表中选择姓名,地址并将其与RUPENAME一起用于STUDENT中的每个RULE外键例如

NAME SURNAME ADDRESS RULE1NAME RULE2NAME RULE3NAME RULE4NAME RULE5NAME 

我熬了整晚试图破解这个,但可悲的是我仍然在广场之一。我将这归因于我在SQL方面的经验不足,但你可以帮助我吗?

UPDATE

谢谢您的回答家伙,dotnetom,巴拉德瓦。

我内心加入了5次dotnetoms建议的答案。查询工作正常,但它为所有五条规则返回相同的规则。这是我的查询

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 

有什么建议吗?谢谢!

+1

因此,这是MySQL或SQL服务器的问题? – dotnetom

+0

您已将此标签标记为[tag:mysql] *和* [tag:sql-server]。这是两种不同的产品。你打算用两个标签吗?另外,当你有*多个*列仅由数字区分时,它通常是SQL中的一种设计气味 - 学生与规则的绑定可能应该是一个独立的多对多表,并且包含许多*行*需要。 –

+0

SQL Server问题。我的道歉,我想以某种方式指定? –

回答

2

您应该能够使用此查询:

SELECT 
    s.NAME, 
    s.SURNAME, 
    s.ADDRESS, 
    r1.RULENAME AS RULE1NAME, 
    r2.RULENAME AS RULE2NAME, 
    r3.RULENAME AS RULE3NAME, 
    r4.RULENAME AS RULE4NAME, 
    r5.RULENAME AS RULE5NAME 
FROM STUDENT s 
    INNER JOIN RULES r1 ON s.RULE1 = r1.ID 
    INNER JOIN RULES r2 ON s.RULE2 = r2.ID 
    INNER JOIN RULES r3 ON s.RULE3 = r3.ID 
    INNER JOIN RULES r4 ON s.RULE4 = r4.ID 
    INNER JOIN RULES r5 ON s.RULE5 = r5.ID 
+1

'INNER JOIN'将要求''学生'必须存在所有5个“规则”。否则不会显示记录。 – Bharadwaj

+1

所有引用字段都被定义为RULEX int not null,这意味着它们将存在 – dotnetom

+0

感谢您的回答。查询起作用。现在的问题是,它在所有规则名称别名 –