首页 > 解决方案 > 在一个表中创建所有用户的子查询,该表的 id 在另一个表中

问题描述

我有 2 个表:表 1 和表 2。该表具有不同的字段,但是表 1 中的字段“uid”始终与表 2 中的字段“uid”具有相同的值。并非 table1 中的所有 id 在 table2 中都具有相同的值,但 table2 中的所有 id 在 table1 中具有相同的值。我正在尝试对我进行查询,为我预设“uid”在另一个表中具有相同值的所有记录,“uidd”中的 table2,在这种情况下,创建一个包含来自 table1 的人员行的 DataTable。这怎么可能?我试过了:

    public void ChackForActiveUsers()
    {
        string name = Request.QueryString["n"];
        string fileName = "UsersDB.accdb";
        string sql = "";
        sql += "SELECT * FROM table1 WHERE uid = '(SELECT uidd FROM table2)'";
        DataTable dt = MyAdoHelper.ExecuteDataTable(fileName, sql);
        if (dt.Rows.Count != 0)
        {
            output += "name - lastname - id - email - password - gender - age" + "<br/>";
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                output += "<br/><form id='mform' action='' method='get' ><input type='text' name='fname' value='" + dt.Rows[i][0] + "'/> - <input type='text' name='lastname' value ='" + dt.Rows[i][1] + "'/> -  <input type='text' name='id' value ='" + dt.Rows[i][2] + "'/> -  <input type='text' name='email' value='" + dt.Rows[i][3] + "'/> -  <input type='text' name='password' value='" + dt.Rows[i][4] + "'/> -  <input type='text' name='gender' value='" + dt.Rows[i][5] + "'/> -  <input type='text' name='age' value='" + dt.Rows[i][6] + "'/> - " + "<input type = 'text' name = 'isadmin' value = '" + dt.Rows[i][7] + "' /> <input type='submit' name='sumbm' value='update' /><input type='submit' name='sumbmm' value='ban' />";

            }
        }
        else
        {
            output = "not found";
        }
    }

到目前为止,我得到的输出是“未找到”,但在数据库中有行知道这种情况。

标签: c#sql

解决方案


您的这个查询在大多数数据库中都不起作用,因为表通常存储超过 1 行:

WHERE uid = '(SELECT uidd FROM table2)'

select之后WHERE必须始终返回 1 行,否则会抛出错误。如果您希望此条件能够处理更多,则uidd需要替换=IN.


推荐阅读