从一个表中选择带有AND子句的数据,并从另一个表中只选择一列?

时间:2016-04-16 22:03:51

标签: c# sql database ms-access

我试图从一个带有AND子句的表中选择两列,同时也只是从另一个表中选择一列。

我想要实现的过程是查询使用AND子句读取一个用于用户名和密码的表,以验证输入的凭据是否正确以及进程的另一部分是否只读取一列的另一个表(列在此表中与上表相同的用户名相关联)

C#中的SQL用于在一个表中选择数据

SELECT TwyID, PW 
FROM LoginTbl 
WHERE TwyID = '"+TwyID_txt.Text+"' 
  AND PW = '"+Pw_txt.Text+"'"

用于选择其他表格中的数据

SELECT Class 
FROM UserInfo 
WHERE TwyID = '"+TwyID_txt.Text+"'

我只想将这两个SQL语句合并为一个。

我看过JOINS的用户,但他们似乎无法工作,我尝试实施它们。

我试过一个解决方案:

SELECT 
    TwyID, PW, 
    (SELECT Class 
     FROM UserInfo 
     WHERE TwyID = '"+TwyIDTextBox.Text+"') 
FROM LoginTbl 
WHERE TwyID = '" + TwyIDTextBox.Text + "' 
  AND PW = '" + PasswordTextBox.Text + "'";

虽然这没有用。

我确定自己昏暗,解决方案相当简单,但尝试新事物永远不会没有问题吗? : - )

希望任何人都可以提供帮助。

谢谢, 利安

4 个答案:

答案 0 :(得分:0)

你应该在这里使用INNER JOIN:

SELECT L.TwyID, L.PW
WHERE L.TwyID = '" + TwyIDTextBox.Text + "' 
    AND L.PW = '" + PasswordTextBox.Text + "'"
FROM LoginTbl L INNER JOIN UserInfo U ON L.TwyID = U.TywID

另外,您永远不应该直接从用户输入创建SQL。这样做存在巨大的安全风险(SQL注入)。

答案 1 :(得分:0)

为什么不尝试加入声明?

Select T1.TwyID,T1.PW,T2.Class
From LoginTbl as T1
Join UserInfo as T2 on T1.TwyID = T2.TwyID
Where T1.TwyID = '"+TwyID_txt.Text+"' AND T1.PW = '"+Pw_txt.Text+"'"

答案 2 :(得分:0)

如果您不想使用加入 你可以试试这个

    select t.Id,t.Password,class
    from
    (select TwyID as 'Id', PW as 'Password' from LoginTable
    where TwyID = '"+TwyIDTextBox.Text+"' and PW = '" + PasswordTextBox.Text + "')as t,UserInfo u
    where u.Id= '"+TwyIDTextBox.Text+"'

但内部联接更好。

答案 3 :(得分:0)

原来我需要LEFT JOIN。

SELECT *
FROM LoginTbl
LEFT JOIN UserInfo
ON LoginTbl.TwyID = UserInfo.TwyID
WHERE LoginTbl.TwyID = '"+TwyIDTextBox.Text"'
AND LoginTbl.PW = '"+PasswordTextBox.Text+"'

此解决方案选择UserInfo表中TwyID与LoginTbl中的TwyID匹配的所有字段。 从这里我能够从UserInfo表中读取类字段到变量,它工作!

感谢大家的所有答案,心怀意义,最终让它发挥作用。