SQL не равняется и пустой указатель

Вы должны очистить поплавки. используйте clear:both - UL.

Вот обновленная скрипка:

.wrapper {
  padding: 20px;
  border: 2px dashed #ec6161;
}

.wrapper::after {
  content: "";
  clear: both;
  display: table;
}

ul {
  /* display: inline-block; */
  clear:both;
}

img {
  margin-right: 20px;
  max-width: 50%;
  float: left;
}
<div class="wrapper">
  <ul>
    <li>
      <div>Item 1</div>
      <ul>
        <li>
          <div>Subitem 1</div>
        </li>

        <li>
          <div>Subitem 2</div>
        </li>
      </ul>
    </li>

    <li>
      <div>Item 2</div>
    </li>
  </ul>

  <img src="http://www.pethealthnetwork.com/sites/default/files/content/images/how-introduce-new-cat-home-2-179981446.jpg" />

  <ul>
    <li>
      <div>Item 1</div>
      <ul>
        <li>
          <div>Subitem 1</div>
        </li>

        <li>
          <div>Subitem 2</div>
        </li>
      </ul>
    </li>

    <li>
      <div>Item 2</div>
    </li>
  </ul>
</div>

9
задан Community 23 May 2017 в 12:19
поделиться

7 ответов

В Oracle нет никакого различия между пустой строкой и ПУСТЫМ УКАЗАТЕЛЕМ.

Это - явное игнорирование стандарта SQL, но там Вы идете...

В дополнение к этому Вы не можете выдержать сравнение с ПУСТЫМ УКАЗАТЕЛЕМ (или не ПУСТЫЕ) с "нормальными" операторами: "col1 = пустой указатель" не будет работать, "col1 = ''" не будет работать, "col1! = пустой указатель" не будет работать, необходимо использовать, "является пустым".

Так, нет, Вы не можете сделать эту работу, любой другой путь затем "седло 1 является пустым" или некоторая вариация на тот (такая как использование nvl).

16
ответ дан 4 December 2019 в 10:34
поделиться

Это зависит от Ваших данных, но большинство оптимизаторов собирается посмотреть на col2 прежде col1, так как = более легкий индекс, чем! =.

Иначе существуют различные способы, которыми можно ускорить этот запрос. Вероятно, лучше сделать (col1! = 'вздор' или col1 являются пустыми), но некоторая база данных позволяет Вам индексировать функцию. Таким образом, можно индексировать, объединяют (col1, 0) и получают хорошую производительность.

Действительно это зависит от Вас данные и Ваша таблица.

2
ответ дан 4 December 2019 в 10:34
поделиться

Я думаю, что решением, которое Вы отправили, является один из наилучших вариантов.

Относительно к производительности, по-моему, это не большая разница в этом случае, если пункт уже имеет a! = сравнение обычно оптимизатор не будет использовать индекс в том столбце, потому что селективность недостаточно, таким образом, более отличительный фильтр будет другой стороной "и" условие.

Если Вы спросите меня, то я не буду использовать пустую строку в качестве пустого указателя, но могу быть, просто персональное предпочтение.

3
ответ дан 4 December 2019 в 10:34
поделиться

Для Oracle

select * from table where nvl(col1, 'value') != 'blah' and col2 = 'something'

Для SqlServer

select * from table where IsNull(col1, '') <> 'blah' and col2 = 'something'
-1
ответ дан 4 December 2019 в 10:34
поделиться

Я думаю, что Ваше увеличение было бы минимально в изменении Нулевых значений к "" строкам. Однако, если 'вздор' не является пустым, то он должен включать Нулевые значения.

Править: Я предполагаю, что удивлен, почему за меня проголосовали здесь. Если 'вздор', если не пустой или пустая строка, то это никогда не должно иметь значения, поскольку Вы уже проверяете, не ли COL1 равен, чтобы 'болтать', который НЕ является ПУСТЫМ УКАЗАТЕЛЕМ или пустой строкой.

-3
ответ дан 4 December 2019 в 10:34
поделиться

В оракуле используют функцию nvl

select * from table where nvl(col1,'notblah') <> 'blah'
0
ответ дан 4 December 2019 в 10:34
поделиться

Если вы хотите ускорить этот вид запросов и используете Oracle 10g или новее, используйте функциональный индекс, чтобы преобразовать эти NULL в значения:

CREATE INDEX query_specific_index ON table (col2, NVL(col1,'***NULL***'));

select * from table 
where NVL(col1,'***NULL***') != 'blah' and col2 = 'something';

База данных будет вполне вероятно, что в этом сценарии используется индекс (разумеется, при условии решения CBO, на которое влияет количество строк и точность статистики). Запрос ДОЛЖЕН использовать точное выражение, указанное в индексе - в данном случае « NVL (col1, '*** NULL ***') »

Конечно, выберите значение для '*** NULL ***' , который не будет конфликтовать ни с какими данными в col1!

0
ответ дан 4 December 2019 в 10:34
поделиться
Другие вопросы по тегам:

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