создание подзапроса всех пользователей в таблице, чей идентификатор находится в другой таблице - PullRequest
0 голосов
/ 25 мая 2019

У меня есть 2 таблицы: table1 и table 2. эта таблица имеет разные поля, однако поле 'uid' в table1 всегда имеет то же значение, что и поле 'uidd' в table2. не все идентификаторы в таблице1 имеют одинаковые значения в таблице2, но все идентификаторы в таблице2 имеют одинаковое значение в таблице1. Я пытаюсь сделать запрос, который задает мне все записи, в которых «uid» имеет то же значение »в другой таблице, table2 в« uidd », и в этом случае создать DataTable witch, содержащую эту строку из таблицы table1. как это возможно? Я попробовал:

    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";
        }
    }

вывод, который я получаю до сих пор, "не найден", но в базе данных есть строки, в которых есть это условие.

Ответы [ 3 ]

0 голосов
/ 25 мая 2019

Похоже, вы хотите использовать EXISTS и коррелированный подзапрос для поиска идентификатора в другой таблице.

SELECT *
       FROM table1 t1
       WHERE EXISTS (SELECT *
                            FROM table2 t2
                            WHERE t2.uidd = t1.uid);

Еще один вариант, более близкий к синтаксису, - использование IN.Но это потенциально медленнее, когда table2 велико.

SELECT *
       FROM table1 t1
       WHERE t1.uid IN (SELECT t2.uuid
                               FROM table2 t2);
0 голосов
/ 25 мая 2019

Попробуйте изменить '=' на 'in':

SELECT * FROM table1 WHERE table1.uid in (SELECT table2.uidd FROM table2)
0 голосов
/ 25 мая 2019

Ваш запрос не будет работать в большинстве баз данных, потому что таблицы обычно хранят более 1 строки:

WHERE uid = '(SELECT uidd FROM table2)'

Этот select после WHERE всегда должен возвращать 1 строку, в противном случае он выдаст ошибку. Если вы хотите, чтобы это условие могло обрабатывать больше uidd, вам нужно заменить = на IN.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...