2013-06-27 73 views
1

我有兩個表之一是受試者的UserDetails列這兩個表:MS SQL內部聯接

  • Subjects(REGNO,IndexNo,SUBJECT_1,Subject_23,Subject_3,Subject_4)和
  • UserDetails(姓名,出生日期,REGNO,地址,身份證)

我想NameDOBRegNoAddressIDUserDetails指數從主題acoording到。我創建的查詢特定的主題,但它不工作_subject是字符串變量包含主題名稱

​​
+2

我不知道MS SQL,但「這裏的」部分這不是說服我 – BeNdErR

回答

1

你可能會想出解決在你自己,但你需要指定WHERE子句的每個部分,像這樣:

WHERE Subjects.Subject_1 = '"+_subject+"'" 
OR Subjects.Subject_2 = '"+_subject+"'" 
OR Subjects.Subject_3 = '"+_subject+"'" 
OR Subjects.Subject_4 = '"+_subject+"'" 
+0

感謝我固定它,現在它的工作 – user2519850

0

你的where子句無效。

嘗試

WHERE 
    Subject_1 = '"+_subject+"' 
    OR Subject_2 = '"+_subject+"' 
    OR Subject_3 = '"+_subject+"' 
    OR Subject_4 = '"+_subject+"'" 

我假設你_subject字符串已消毒和用戶不能只是使用它的SQL注入攻擊...

0

你是不是想匹配任何科目進行的UserDetails對存儲在一個字符串變量?

試試這個

DECLARE @subject varchar(20) = 'subjectstringvalue'; --variables are declared like this in T-sql 
SELECT 
ud.Name 
,ud.DOB 
,ud.RegNo 
,ud.Address 
,ud.ID 
,s.IndexNo 

FROM UserDetails AS ud 
INNER JOIN Subjects AS s 
    ON ud.RegNo = s.RegNo 

WHERE s.Subject_1 = @subject --variables are used like this in T-sql 
OR Subject_2 = @subject 
OR Subject_3 = @subject 
OR Subject_4 = @subject 
0

而不僅僅是創建一個簡單的存儲過程像下面並通過您的主體價值的參數。

CREATE PROC GetDetails 
(
    @Subject VARCHAR(10) 
) 
BEGIN  
    SELECT UserDetails.Name,UserDetails.DOB, 
      UserDetails.RegNo,UserDetails.Address, UserDetails.ID, 
    Subjects.IndexNo 
    FROM UserDetails 
    INNER JOIN Subjects ON UserDetails.RegNo = Subjects.RegNo 
    WHERE Subject_1 = @Subject 
     OR Subject_2 = @Subject 
     OR Subject_3 = @Subject 
END