Вложенные SQL-запросы

У меня есть следующий SQL-запрос. В этом запросе я присоединяюсь к таблице tblTestImport с запросом доступа с именем «unique». Я пытаюсь интегрировать запрос «уникальный» в приведенный ниже код. Мне не повезло, пожалуйста, помогите.

DELETE tblTestImport.ID
FROM tblTestImport
WHERE tblTestImport.[ID]

in (SELECT tblTestImport.ID
FROM tblTestImport 
LEFT JOIN **[unique]**

ON tblTestImport.ID = **unique.**LastOfID

WHERE (((**unique.**LastOfID) Is Null)));

Код для "уникального" запроса

SELECT Last(tblTestImport.ID) AS LastOfID
FROM tblTestImport
GROUP BY tblTestImport.Url, tblTestImport.Kms, tblTestImport.Price, tblTestImport.Time;

Дополнительная информация: я пытаюсь удалить дубликаты из таблицы доступа и оставить только уникальные. tblTestImport имеет повторяющиеся записи. «Уникальный» запрос отображает уникальные записи. Затем я присоединяюсь к таблице tblTestImport с «уникальным» запросом, чтобы определить, какие уникальные записи не существуют в tblTestImport. Это дает мне список дубликатов, который я хочу удалить.

В большом фрагменте кода у меня есть [unique], который я хотел бы заменить небольшим фрагментом кода ниже.

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

Gordon Linoff 27.04.2018 21:59

отредактирован, чтобы включить больше деталей. Спасибо

jcmaad 27.04.2018 22:25
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
2
60
3

Ответы 3

Ваш запрос не вернет результатов, если предположить, что id никогда не является NULL.

Почему? Что ж, unique.lastOfId - это всегда действительный идентификатор в tblTestImport. Таким образом, LEFT JOIN всегда будет соответствовать, а lastOfId никогда не будет NULL.

Итак, в подзапросе нет строк.

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

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

DELETE tblTestImport.ID
FROM tblTestImport
WHERE tblTestImport.[ID] IN
    (SELECT tblTestImport.ID
    FROM tblTestImport 
    LEFT JOIN [unique] ON tblTestImport.ID = unique.LastOfID
    WHERE unique.LastOfID Is Null
    AND tblTestImport.ID IN (
        SELECT Last(tblTestImport.ID) AS LastOfID
        FROM tblTestImport
        GROUP BY tblTestImport.Url, tblTestImport.Kms, tblTestImport.Price, tblTestImport.Time)
    )

(Это простой вложенный запрос в предыдущем запросе, но все будет зависеть от взаимосвязи самих данных. Этот запрос предполагает, что они связаны в одном поле tblTestImport.ID)

Попробуйте следующее, не проверено:

DELETE FROM tblTestImport
WHERE ID <>  (SELECT Min(ID) AS MinOfID FROM tblTestImport AS Dupe      
   WHERE (Dupe.Url= tblTestImport.Url)                         
   AND (Dupe.Kms= tblTestImport.Kms)
   AND (Dupe.Price= tblTestImport.Price)
   AND (Dupe.Time= tblTestImport.Time)); 

Решение на основе следующего http://allenbrowne.com/subquery-01.html

Другие вопросы по теме