#mysql #sql #join #subquery #where-clause
#mysql #sql #Присоединиться #подзапрос #where-предложение
Вопрос:
У меня есть таблица tablename со столбцами col1-col10. Не в каждой строке заполнен col4, но в каждой строке заполнены col1, col2, col3. Я хочу получить все кортежи {col1, col2, col3}, когда col4 удовлетворяет условию, затем получить все строки, которые соответствуют кортежу {col1, col2, col3} из tablename.
Я не уверен, следует ли мне использовать inner join или left join или что-то еще? (Я думаю, что как внутреннее, так и левое соединение должны дать мне одинаковый результат) Приведенный ниже запрос выдает синтаксическую ошибку «несоответствующий ввод КАК». Как правильно написать этот запрос?
select col1, col2, col3
from tablename
where col4 >= 1000 AS A
INNER JOIN
(select *
FROM tablename) AS B
ON A.col1 = B.col1 AND A.col2 = B.col2 A.col3 = B.col3
Ответ №1:
Вы можете использовать exists
:
select t.*
from mytable t
where exists (
select 1
from mytable t1
where
t1.col1 = t.col1
and t1.col2 = t.col2
and t1.col3 = t.col3
and t1.col4 >= 1000
)
Комментарии:
1. что означает
select 1
в этом запросе?2. @user1745995:
exists
просто проверяет, возвращает ли подзапрос какую-либо строку (независимо от содержимого), поэтому нам не нужно, чтобы он что-то возвращал — следовательноselect 1
. Это просто соглашение, вы бы использовалиselect *
orselect 0
, это не изменило бы результаты.3. Эквивалентно ли это объединению :