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

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

0 голосов
/ 27 апреля 2018

У меня следующий запрос 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. Это дает мне список дубликатов, которые я хочу удалить.

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

Ответы [ 3 ]

0 голосов
/ 27 апреля 2018

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

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)

0 голосов
/ 28 апреля 2018

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

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

0 голосов
/ 27 апреля 2018

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

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

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

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

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