繁体   English   中英

sql语句——两个表之间的关系

[英]sql statement - relationship between two tables

我有两个表可以访问: Messages 其中有:

  • 消息ID
  • 发件人
  • 留言至
  • 消息主题
  • 留言

用户拥有

  • 用户名
  • 用户名
  • 密码

. 这两个表在 UserID 和 MessageTO 之间存在关系。

我的用户连接,我必须检查它是否是我数据库中的正确登录名/密码。 然后我需要显示两个表中的信息。 我不知道如何加入他们。

<%  
var mycon;
mycon = new ActiveXObject("ADODB.Connection");
var myrec = new ActiveXObject("ADODB.Recordset"); 
mycon.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\Omnivox.mdb"); 

var txtpassword = Request.QueryString("txtpassword");
var txtuserID = parseInt (Request.QueryString("txtuserID"));
  if (txtpassword == "" || txtuserID == "")
{
    Response.Redirect("index.aspx");
}

sql= "SELECT * FROM UserOmnivox WHERE UserID=" +txtuserID+ " AND UserPassword='" + txtpassword + "';";    
var sql;
myrec. Open (sql, mycon);   

%> 

带有示例数据的 tb_Message 表

+-----------+-------------+-----------+----------------+--------------+
| MessageID | MessageFrom | MessageTo | MessageSubject | Message      |
+-----------+-------------+-----------+----------------+--------------+
| 1         | 1           | 2         | Test Subject   | Test Message |
+-----------+-------------+-----------+----------------+--------------+

带有示例数据的 tb_User 表

+--------+----------+----------+
| UserID | UserName | Password |
+--------+----------+----------+
| 1      | User1    | 1234     |
+--------+----------+----------+
| 2      | User2    | 4321     |
+--------+----------+----------+

考虑到上述数据结构,下面的查询可以帮助您提取数据 -

SELECT M.MessageID, U1.UserName AS MessageFrom, U2.UserName AS MessageTo, M.MessageSubject, M.Message
FROM (tb_Message M
INNER JOIN tb_Users U1 ON M.MessageFrom = U1.UserID)
INNER JOIN tb_Users U2 ON M.MessageTo = U2.UserID

这将显示结果为 -

+-----------+-------------+-----------+----------------+--------------+
| MessageID | MessageFrom | MessageTo | MessageSubject | Message      |
+-----------+-------------+-----------+----------------+--------------+
| 1         | User1       | User2     | Test Subject   | Test Message |
+-----------+-------------+-----------+----------------+--------------+

您可以使用JOINS ,在这种情况下,您的查询可能是(这是一些列的示例): SELECT U.username, U.password, M.messages FROM User U INNER JOIN Message M ON U.UserID=M.MessageTO

您必须使用别名来引用表 User (U) 或 Message (M),并在条件上添加JOIN ,这意味着具有关系的列。

PD:在表名中使用单数而不是复数是一个很好的做法。

您的加入查询基本上是

Select M.MessageFrom, M.MessageTO, M.MessageSubject
FROM Messages M
INNER JOIN User U
ON M.MessageTO = U.UserID;

但是,这里还有更多需要解决的问题。 您应该使用参数化查询而不是字符串连接。 您目前容易受到SQL 注入攻击

我也很好奇为什么我在你的代码中看到 <% 。 这让我相信我正在查看一个 aspx 文件而不是一个 aspx.cs 文件。 此代码应位于以 .cs 结尾的文件中

话虽如此,我没有大量的网络表单经验,也没有很多声誉点。 我的回答可能不完全是您所需要的,但希望这些链接会有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM