мне нужно SELECT *, где отчетливый 'Rua'
с различными 'CP'
в следующей БД:ВЫБРАТЬ все столбцы из различных двух столбцов
id Rua Local Conc CP
81143 dos moinhos Rio Tinto Gondomar
81142 dos Moinhos Rio Tinto Gondomar 4435
81141 dos Moinhos Rio Tinto Gondomar 4435
С помощью следующего запроса, я могу получить две колонки:
SELECT Rua, CP
FROM Codigo
GROUP BY Rua, CP
HAVING COUNT(*) = 1
Но я хочу все столбцы. SELECT *
возвращает «Столбец« Codigo.id »недействителен в списке выбора, потому что он не содержится ни в агрегатной функции, ни в предложении GROUP BY».
Так я пришел на этот ответ: How do I (or can I) SELECT DISTINCT on multiple columns?
я не пошел за принятый ответ, так как я нужен быстрый запрос (это будет использоваться для AJAX предложений поиска). Я использовал другой высокоприоритетный ответ. Таким образом, я создал следующий запрос:
SELECT * From Codigo
WHERE (Rua,CP) IN (
SELECT Rua, CP
FROM Codigo
GROUP BY Rua, CP
HAVING COUNT(*) = 1
);
Это возвращает выражение не-логического типа, указанный в условиях, когда состояние, как ожидается, около «» ошибки. Почему он ожидает Rua
после WHERE
быть булевым? В ответе они использовали saleprice
, которые не кажутся логическими.
Так что мой вопрос, как я могу выбрать все столбцы включая строк с одинаковым Rua
и CP
, но те только один раз (DISTINCT
)?
обе работы , Первое предложение занимает 33 секунды, секунды занимают 3 :) Почему такая разница? – Dillinger
@Dillinger - потому что оптимизатор должен сканировать/искать таблицу только один раз во втором подходе –
Думаю, я не задал вопрос правильно. Я хочу, чтобы строки с такими же «Rua» и «CP» включались, но только один раз. При этом я получаю только те результаты, которые не имеют повторяющихся 'Rua' и' CP'. Если я отредактирую и исправлю свой вопрос, вы исправите свой ответ? – Dillinger