В дополнение к нарушению первой нормальной формы из-за повторяющейся группы значений, хранящихся в одном столбце, в списках, разделенных запятыми, есть много других более практических проблем:
idlist REGEXP '[[:<:]]2[[:>:]]'
* Чтобы решить эти проблемы, вам нужно написать тонны кода приложения, заново изобрести функциональные возможности, которые СУБД уже обеспечивает гораздо более эффективно .
Списки, разделенные запятыми, настолько ошибочны, что я сделал это первой главой в моей книге: SQL Antipatterns: избегайте ошибок программирования баз данных .
Бывают случаи, когда вам нужно использовать денормализацию, но, поскольку @OMG Ponies упоминает , это исключения. Любая нереляционная «оптимизация» выгодна для одного типа запросов за счет других видов использования данных, поэтому убедитесь, что знаете, какие из ваших запросов нужно обрабатывать так специально, что они заслуживают денормализации.
* MySQL 8.0 больше не поддерживает этот синтаксис выражения слова-границы.
Вы не ищете кросс-таблицу, просто проверьте количество ненулевых значений, используя notnull
:
df[df.notnull().sum(1).gt(1)]
a b c
0 a NaN c
1 a b NaN
2 NaN b c
<час> Или вы можете использовать [ 115]:
t = 2
df.dropna(thresh=df.shape[1] - t + 1)
a b c
0 a NaN c
1 a b NaN
2 NaN b c