SQL Выбрать из таблицы, используя результаты предыдущего запроса SELECT? - PullRequest
0 голосов
/ 24 августа 2018

По сути, я хочу выбрать из одной таблицы, затем с помощью результата выбрать из другой таблицы и, наконец, повторить выбранные значения.

DECLARE @var1 int; /*This should become the result of Table1.Column1 */
DECLARE @var2 nchar(50); /*This should become the result of Table1.Column2 */
DECLARE @var3 nchar(50); /*This should become the final result */

SELECT @var1 = (SELECT Column1 FROM Table1 WHERE Column3 = '12345')
SELECT @var2 = (SELECT Column2 FROM Table1 WHERE Column3 = '12345')

SELECT Column1 FROM Table2 WHERE Id = @var1

Затем, как только это закончится, PHP echo var1, var2и var3.

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

Ответы [ 2 ]

0 голосов
/ 24 августа 2018

Вы можете сделать это двумя способами. Поскольку ваш первый запрос возвращает единственный результат, вы можете использовать этот подвыбор в качестве выражения во втором запросе:

SELECT @var2 = (SELECT Column2 FROM Table1 WHERE Column3 = (SELECT Column1 FROM Table1 WHERE Column3 = '12345'))

или вы можете использовать общее табличное выражение (я предполагаю, что SQL Server):

with CTE_Table (var1) as
(SELECT Column1 FROM Table1 WHERE Column3 = '12345')
SELECT @var2 = (SELECT Column2 FROM Table1 WHERE Column3 = (select var1 from CTE_Table))

Что-то из этой окружности должно работать. Я только что ввел это здесь для контекста, но не проверял синтаксис.

0 голосов
/ 24 августа 2018

Для этого и требуется объединение.Первые два примера SELECT операторов можно объединить в один оператор, например:

 SELECT column1, column2 FROM table WHERE column3 = '12345';

Затем вы можете присоединиться к своему table2:

SELECT
    t1.column1,
    t1.column2,
    t2.column1
FROM Table1 T1
    LEFT OUTER JOIN Table2 T2
        ON t1.column2 = t2.id
WHERE t1.Column3 = '12345';

, используя LEFT OUTER JOIN здесьтак как это тип соединения, который лучше всего подходит для вашего кода псевдо выше.По сути, «ВЫБЕРИТЕ все записи, которые соответствуют критериям WHERE из таблицы1, и любые записи, которые могут также совпадать с таблицей2, на основе этого условия ВКЛ. Если в Таблице 2 нет соответствующих записей для этого условия ВКЛ, то просто верните NULL для этого столбца таблицы2».

Возвращенный набор результатов будет иметь три поля, которые функционально равны вашим @var1, @var2 и @var3

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