All streams
Search
Write a publication
Pull to refresh
2
0

Пользователь

Send message
Если бы не всунули новинку в стандартный интерфейс (патрон), то, до сих пор с ней баловались бы редкие энтузиасты.

Или вы думаете, что людям заняться больше нечем, кроме как заменой всех светильников в доме, каждый раз когда меняется принцип действия лампы?
По вашему выходит, что все великие географические открытия прошлого делались психами? Или вы считаете, что Колумб, например, совершал свое путешествие имея 100% гарантию успешного возвращения?

А все космические корабли «поколений» из фантастических романов тоже комплектовались исключительно психами? Да и авторы этих романов тоже психи, раз такую ересь придумали?

Я же думаю что экспедиция в один конец без проблем будет укомплектована экипажем из адекватных специалистов.
Даешь больше парниковых газов! И да, я за потепление климата. Для Беларуси в этом дни плюсы. Может это и цинично, но своя рубашка ближе к телу.
Замечательно! Воду то мы потом дольем до нужной плотности, а откуда возьмется испарившийся электролит?

И, если электролит совсем не нужно доливать, то зачем он продается?
Вопрос: почему надо доливать только воду?
Вы же сами пишите:
Газообразные водород и кислород могут увлекать за собой капельки электролита, создавая аэрозоль серной кислоты.

Следовательно, кислота тоже может испаряться.
Имхо, правильная рекомендация:
Надо доливать воду, контролируя плотность электролита. При необходимости долить серную кислоту.
У СУБ, который использовался в Лахте, ОК был 60-65 см!


При высоте конуса в 30 см? Это как?

Разница в том, что алиас не бессмысленная буковка i или a, а говорящее название:
Invoices — все счета,
Invoice — один счет
InvoicesOld — некие старые счета
И я, смотря на любое место многостраничного запроса, могу сразу понять о чем речь, без необходимости прыгать к столбику алиасов в предложении FROM.


В-третьих, alias (псевдоним) на то и псевдоним, чтобы использовать его на своё усмотрение для повышения читаемости кода.

Хотя бы один пример повышения ЧИТАЕМОСТИ можно? Ваша метода способствует лишь скорости набора кода. А читаемость вы пытаетесь повысить экзотическим форматированием кода.


Ссылка на technet лишь подтверждает мое мнение о распространенном заблуждении.

У вас распространенное заблуждение, что алиасы это сокращенное название. Тогда как алиас (ИМХО) это смысловое название выборки.
Например:


SELECT Invoices.* 
FROM
   dbo.V_Invoices Invoices

но


SELECT Invoice.* 
FROM
   dbo.V_Invoices Invoice
WHERE
   Invoice.id = 100

или


SELECT InvoicesOld.* 
FROM
   dbo.V_Invoices InvoicesOld
WHERE
   InvoicesOld.issueDate < DATEADD(mm,-1,GETDATE())

Вот это реально помогает понимать код (а не буквы в столбик).

ну не знаю… Ради редкого изучения кода жертвовать удобством работы с данными… У меня были случаи, когда я менял порядок полей в таблице/виде, только потому, что их неудобно было просматривать (важные поля находились не рядом или вылезали за границы экрана).


Хороший инструмент просмотра БД спасает иногда, но не всегда он есть под рукой.


А про алиасы… Извините, но однобуквенные алиасы это ужас. У меня они осмысленные и всегда одинаковые для таблиц с одинаковыми сущностями (за исключением суффикса, в случае множественного присоединения). Поэтому и смысла вычленения алиасов глазами нет никакого.

В обычном коде у меня EXCEPT вообще ни разу не встречается. Но как без него жить при отладке??? Например, поменяли процедуру загрузки данных. Надо убедиться, что все корректно. Копируем существующую таблицу под другим именем, по новой грузим данные и сравниваем через вышеупомянутый прием, что процедура работает правильно, данные совпадают.
Или есть два сервера/две БД, надо убедиться, что данные совпадают:


   SELECT * FROM serverA.DBname.dbo.TableX
   EXCEPT
   SELECT * FROM serverB.DBname.dbo.TableX

на mssql прекрасно работает и выручает постоянно...

Я всегда пишу смысловую часть на отдельных строчках от ключевых слов SELECT, FROM, WHERE, ORDER BY, GROUP BY:


SELECT 
   a.ClientID
   ,a.ClientName
   ,a.ProductID
   ,a.ManagerID

и т.д. Причина: легче делать рефакторинг, т.к. можно менять строки местами и их копипастить без удаления ключевых слов. Ну и джоины отбиваю отступом — но это на любителя:


FROM 
   Clients a
      LEFT JOIN Products_view b 
         ON a.ProductID = b.ProductID
      LEFT JOIN Managers c 
         ON a.ManagerID = c.ManagerID

Ну и пункт 5 мне совершенно не понятен. Поля располагаю так, что бы было удобно изучать результат. Например, код в таблице фактов и его описание из справочника будут идти подряд, несмотря на то, что они из разных таблиц.

Серьезно? Ну напишите FULL JOIN для таблицы хотя бы с 10-ю NULLable полями (f0,....,f9), выдающий аналогичный EXCEPTу результат. А финт с EXCEPT прекрасно работает на любом количестве полей и без утомительных проверок NULL/не NULL.

Касательно EXCEPT:
К сожалению нет стандартного ПРОСТОГО способа найти разницу двух таблиц одинаковой структуры Table1 и Table2.


Приходится писать или


(
   SELECT * FROM Table1
   EXCEPT
   SELECT * FROM Table2
)
UNION ALL
(
   SELECT * FROM Table2
   EXCEPT
   SELECT * FROM Table1
)

или заморачиваться с FULL JOIN.

Двойные кавычки и квадратные скобки это стандартный способ для ограничения идентификаторов (а точнее, квадратные скобки стандартны только для mssql). Одинарные же кавычки в алиасе — видимо работают только там, по некому недоразумению.
Сравните:


CREATE TABLE "Тестовая таблица" (id INT)
DROP TABLE "Тестовая таблица" 

и


CREATE TABLE 'Тестовая таблица' (id INT)
DROP TABLE 'Тестовая таблица' 
Ну неужели никто не играет в Rocks'n'Diamonds? (https://www.artsoft.org/).
А к нему over 9000 уровней Сокобана, Супаплекса, Змееек и прочая и прочая… (уровни брать тут http://www.artsoft.org/rocksndiamonds/levels.html)
Я сейчас набор уровней Snake Bite прохожу — очень неплохо.
0x2017 = 8215 (и, очевидно, не простое)
Разумеется, только на работу ламп накаливания даже сильный нагрев никакого влияния не оказывает. А электроника диодных ламп от нагрева стремительно дохнет.
Функция ISNULL преобразует к наименьшему типу из двух операндов. COALESCE преобразует к наибольшему типу.

ISNULL преобразует к типу первого операнда.
ISNULL позволяет сбросить признак nullable с колонки (бывает нужно при создании видов или временных таблиц).
COALESCE позволяет указывать много аргументов.

Добавление в копилку полезных приемов:
Создавать временные таблицы желательно без явного указания типов, путем копирования типов нужных полей из таблиц с которыми собираемся в дальнейшем работать. Например:
SELECT e.BusinessEntityID
, p.FirstName
, p.MiddleName
, p.LastName
INTO #TmpTable
FROM HumanResources.Employee e
JOIN Person.Person p ON p.BusinessEntityID = e.BusinessEntityID
WHERE 0=1
Получаем пустую временную таблицу с колонками нужных типов. И, если в будущем размерность какого-либо поля изменится, код переписывать не придется.
Хинт1. конструкт NULLIF(column,column) as column позволяет писать в колонку временной таблицы NULL, даже если в исходной NULL не допустим.
Хинт2. конструкт column+0 AS column позволяет снять признак IDENTITY с колонки

Идеал должен в данном конкретном случае выдать: «По вашему запросу ничего не найдено». Увы и ах — где найти тот идеал…

Information

Rating
Does not participate
Location
Витебск, Витебская обл., Беларусь
Registered
Activity