Подтвердить что ты не робот

Подзапрос Mysql приводит к предложению "where"

Возможно ли выполнить такой запрос mysql?

select (select A from B where ... ) as C from D where C like ' ... '

Мне нужно использовать результат подзапроса в общем разделе "where".

4b9b3361

Ответ 1

Вы можете обернуть его в подзапрос, подобный этому:

SELECT * 
FROM (
        select (select A from B where ... ) as C from D
     ) subq
WHERE 
    C like ' ... '

Ответ 2

Вы читали это?

http://dev.mysql.com/doc/refman/5.0/en/subqueries.html

Подзапрос - это оператор SELECT в другом выражении.

Начиная с MySQL 4.1 все формы и операции подзапроса, которые Требуется стандарт SQL, а также несколько функций, которые специфичны для MySQL.

Вот пример подзапроса:

SELECT * FROM t1 WHERE column1 = (SELECT column1 FROM t2); 

В этом Например, SELECT * FROM t1... - это внешний запрос (или внешний оператор), и (SELECT column1 FROM t2) является подзапросом. Мы говорим, что подзапрос вложен в внешний запрос, и на самом деле можно вложить подзапросы в других подзапросах, на значительную глубину. Подзапрос должен всегда отображаться в круглых скобках.

Основные преимущества подзапросов:

Они разрешают структурированные запросы, чтобы можно было изолировать каждую часть инструкции.

Они предоставляют альтернативные способы выполнения операций, которые иначе потребуются сложные объединения и объединения.

Многие люди находят подзапросы более читаемыми, чем сложные объединения или союзы. Действительно, именно инновации подзапросов дали людям оригинальная идея вызова раннего SQL "Структурированный запрос" Язык ".

Вот пример, который показывает основные моменты синтаксиса подзапроса, как определено стандартом SQL, и поддерживается в MySQL:

Ответ 3

Хотя это действительно действует SQL:

select (select A from B where A = D.A ) as C 
from D

Вы намного лучше (по производительности) реализуете JOIN:

SELECT D.A
FROM D
INNER JOIN B ON B.A = D.A

Ответ 4

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

Select C from D inner join (Select A from B where...) C on C.1=D.1 where C like....

Ответ 5

Если вы имеете в виду сравнение результатов подзапроса в где, да, вы можете это сделать.

select X ... where (select Y ... ) = Z

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

Если вы имеете в виду выполнение где против подзапроса, вы просто выбираете все и применяете где. Однако, опять же, вы можете просто применить другой вариант.

select X ... where Y = Z and A = B.

Ответ 6

Это всегда лучше присоединяться к таблице вместо подзапроса. то есть Подзапрос:

SELECT id, (SELECT abc FROM t2 WHERE ID = user_id) as user_name FROM t1

Присоединиться:

SELECT c.id,u.abc  FROM t1 as c LEFT JOIN t2 AS u ON  u.ID = c.user_id WHERE 1=1 AND u.`user_login` = 'qwe123'

Если мы попытаемся поместить предложение where в подзапрос, он выдает ошибку.