Как я нахожу дублирующиеся записи в таблице базы данных?

Итак, мой вопрос: почему я все еще могу назвать Go_XXX_Your_Self () и Identify_Your_Self () даже после удаления объекта?

blockquote>

Из-за undefined behavior .

Как это работает на C ++? (есть ли даже после его удаления?)

blockquote>

Из-за неопределенного поведения . Нет гарантии, что он будет работать одинаково на других реализациях. Опять же, неопределенное поведение .

Также вы можете проверить, нет ли там этого? (Я знаю, что теоретически невозможно, но мне любопытно посмотреть, какие методы там)

blockquote>
delete MC1;
MC1 = nullptr;

Установив указатель на nullptr после delete, он время выполнения, скорее всего, обнаружит, что вы получаете доступ к недействительному местоположению, которое вы не имеете права использовать. Кроме того, тщательно выполняя это для всех применимых указателей, вы можете проверить, действителен ли объект или нет (действителен, если не nullptr).

if(my_ptr) {
   // my_ptr is most possibly valid (though you can still go wrong)
   // use my_ptr
}

Аналогичным образом, вы также должны установить raw указатели на nullptr, если они еще не инициализированы каким-либо действительным адресом.

MyClass* some_ptr = nullptr;
...

Но опять же, если у вас есть доступ к современным средствам C ++ 11, гораздо лучше не использовать raw указатели вообще, и просто используйте std::unique_ptr или std::shared_ptr (в зависимости от вашей требуемой семантики). И в будущих стандартных версиях C ++ вы также можете использовать предложенный std::exempt_ptr , который является не владеющей, наблюдательной оболочкой-указателем.

25
задан Huuuze 12 January 2009 в 16:29
поделиться

4 ответа

Вложенный запрос может сделать задание.

SELECT author_last_name, dewey_number, NumOccurrences
FROM author INNER JOIN
     ( SELECT author_id, dewey_number,  COUNT(dewey_number) AS NumOccurrences
        FROM book
        GROUP BY author_id, dewey_number
        HAVING ( COUNT(dewey_number) > 1 ) ) AS duplicates
ON author.id = duplicates.author_id

(я не знаю - ли это самый быстрый способ достигнуть того, что Вы хотите.)

Обновление: Здесь мои данные

SELECT * FROM author;
 id | author_last_name 
----+------------------
  1 | Fowler
  2 | Knuth
  3 | Lang

SELECT * FROM book;
 id | author_id | dewey_number |         title          
----+-----------+--------------+------------------------
  1 |         1 |          600 | Refactoring
  2 |         1 |          600 | Refactoring
  3 |         1 |          600 | Analysis Patterns
  4 |         2 |          600 | TAOCP vol. 1
  5 |         2 |          600 | TAOCP vol. 1
  6 |         2 |          600 | TAOCP vol. 2
  7 |         3 |          500 | Algebra
  8 |         3 |          500 | Undergraduate Analysis
  9 |         1 |          600 | Refactoring
 10 |         2 |          500 | Concrete Mathematics
 11 |         2 |          500 | Concrete Mathematics
 12 |         2 |          500 | Concrete Mathematics

И здесь результат вышеупомянутого запроса:

 author_last_name | dewey_number | numoccurrences 
------------------+--------------+----------------
 Fowler           |          600 |              4
 Knuth            |          600 |              3
 Knuth            |          500 |              3
 Lang             |          500 |              2
22
ответ дан Federico A. Ramponi 15 October 2019 в 16:25
поделиться

Вы, вероятно, хотите это

SELECT dewey_number, author_last_name,
 COUNT(dewey_number) AS NumOccurrences
FROM book
GROUP BY dewey_number,author_last_name
HAVING ( COUNT(dewey_number) > 1 )
20
ответ дан Kibbee 15 October 2019 в 16:25
поделиться
SELECT dewey_number, author_last_name,
       COUNT(dewey_number) AS NumOccurrences
FROM book
JOIN author USING (author_id)
GROUP BY dewey_number,author_last_name
HAVING COUNT(dewey_number) > 1

, Если книга author_id может быть пустой тогда, изменяют соединение на:

LEFT OUTER JOIN author USING (author_id)

, Если author_id столбец имеет другое имя в каждой таблице тогда, Вы не можете использовать ИСПОЛЬЗУЯ, использовать НА вместо этого:

JOIN author ON author.id = book.author_id

или

LEFT OUTER JOIN author ON author.id = book.author_id
2
ответ дан Tony Andrews 15 October 2019 в 16:25
поделиться
select author_name,dewey_number,Num_of_occur
from author a,(select author_id,dewey_number,count(dewey_number) Num_of_occur
                from   book
                group by author_id,dewey_number
                having count(dewey_number) > 1) dup
where a.author_id = dup.author_id
0
ответ дан Misa Lazovic 15 October 2019 в 16:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: