Соединение SQL с той же таблицей с другим выбором

#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 * or select 0 , это не изменило бы результаты.

3. Эквивалентно ли это объединению :