2014-06-24 32 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

感謝您的回答。查詢起作用。現在的問題是,它在所有規則名稱別名 –