SQL: Как я обращаюсь к результату предыдущего запроса?

Предположим, что у меня есть SQL-запрос, который похож на это:

SELECT fName from employees where ssn=123456789;

Предположим, что я хочу следовать за предыдущим запросом с другим:

SELECT fName from records WHERE ssn=123456789;
SELECT lName from records WHERE fName=(the result of the previous query)

Для чего я вставляю (the result of the previous query) сделать этот возврат фамилиями из записей, где fName соответствует, по-видимому, уникальной записи где ssn=123456789?

Я знаю, что это - нереалистичный пример, но что я спрашиваю, "Как я обращаюсь к результату своего предыдущего запроса?"

BTW, если это имеет какое-либо значение, я использую SQL Server MS 2008.Спасибо!

5
задан Rowland Shaw 14 July 2014 в 10:26
поделиться

3 ответа

Вы можете сохранить результат первого запроса в переменной и использовать эту переменную во втором запросе.

DECLARE @firstName VARCHAR(255)
SELECT @firstName = fName from employees where ssn=123456789

SELECT lName from records WHERE fName=@firstName
7
ответ дан 18 December 2019 в 09:49
поделиться
SELECT lName from records WHERE fName =(SELECT fName from employees where ssn=123456789)

ИЛИ

 SELECT lName from records r
 INNER JOIN employees e ON (e.fName = r.fName)
 WHERE e.ssn = 123456789

ИЛИ Вы также можете использовать CTE.

5
ответ дан 18 December 2019 в 09:49
поделиться

Я в конечном итоге добавил ulimit -s BLA к командам, которые в этом нуждались. Я специально не хотел идти с BSD:: Resource, потому что это не пакет Perl по умолчанию и отсутствовал примерно на половине существующих машин для разработки. Взаимодействие с пользователем не является определенным требованием.

-121--3565902-

Проблемы атак XSS в большей степени связаны с рыболовством. Проблема в том, что сайт, которому доверяет клиент, может быть введен с кодом, который приводит к сайту, созданному злоумышленником для определенных целей. Например, кража конфиденциальной информации.

Итак, при атаках XSS вторгшиеся не попадают в вашу базу данных и не связываются с ней. Он играет с чувством в клиенте, что этот сайт безопасен и каждая ссылка на нем указывает на безопасное место.

Это всего лишь первый шаг реальной атаки - привести клиента во враждебное окружение.

Я могу привести вам краткий пример. Если банковское учреждение кладет на свою страницу, например, чек-бокс, и они не мешают мне атаковать XSS, я могу кричать «Эй, приходи по этой ссылке и вводи тебе пароли и кредитную карту Нет для проверки безопасности!»... И вы знаете, к чему приведет эта ссылка, верно?

Вы можете предотвратить атаки XSS, убедившись, что вы ничего не отображаете на своей странице, что исходит от ввода пользователей, не избегая html-тегов. Специальные символы должны быть удалены, чтобы они не мешали разметке html-страниц (или какой-либо технологии вы используете). Существует множество библиотек, обеспечивающих эту возможность, включая библиотеку Microsoft AntiXSS.

-121--2240760-

Существует три очевидных способа сделать это. Можно использовать переменные SQL, временные таблицы (или переменные таблицы, они примерно эквивалентны) или вложенный запрос.

SQL Variables

Здесь вы сохраняете желаемое значение в переменной (фрагмент кода @ fname ниже), а затем можете использовать его позже. При таком подходе вы хотите быть осторожными, чтобы ваш SSN действительно был уникальным идентификатором.

Declare @fname Varchar(50)

Select @fname = fname 
from employees 
Where ssn = 123456789

Select lName from records
where fname = @fname

Временная таблица

С помощью временной таблицы создается требуемая таблица записей. Затем это можно использовать позже, и для получения нужных записей используется временная таблица в подзапросе.

Можно либо объявить временную таблицу как отдельную инструкцию create table , либо объявить ее как часть выбора, как я делаю это ниже.

Select fname into #temptable
From employees
Where ssn = 123456789

Select lName from records
where fname in 
(
    Select fname 
    from #temptable
)

Sub Query

Это на самом деле очень похоже на подход временной таблицы, но вы вставляете часть временной таблицы, поэтому вы не можете сослаться на нее позже.

Select @fname = fname 
from employees 
Where ssn = 123456789

Select lName from records
where fname in 
(
   Select fname 
   from employees 
   Where ssn = 123456789 
)
5
ответ дан 18 December 2019 в 09:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: