
Sergey
29.12.2017
13:32:11

Bohdan
29.12.2017
13:32:13

$iD
29.12.2017
13:32:23

Dmitry
29.12.2017
13:33:36
да не зависит от подхода, через пару лет ты ничего не вспомнишь, если эти два года не занимался ... тем более джойны, они часто вообще на набивание руки, опыт тут важнее теории

Google

Sergey
29.12.2017
13:34:05
согласись, вполне себе возможно такого джуна найти)

Konstantin
29.12.2017
13:34:31
ну да
джойн не шибко сложный
где-то даже табличка на стековерфлоу валялась с объяснением иннер и аутер и прочего
в картинках, легко и доступно

Dmitry
29.12.2017
13:35:19
я в свое время задавал простую задачку - есть новости и категории "многие ко многим", выбрать id новостей, которые не принадлежат категории 5... да почти никто не решал, хоть мидл, хоть сеньор

Sergey
29.12.2017
13:35:25
ну вот берешь ноут, даешь кандидату на каком-нибудь sqlfiddle и врубаешь запись экрана)

Dmitry
29.12.2017
13:35:40
в лучшем случае делали через NOT IN

Sergey
29.12.2017
13:36:50

Vasily
29.12.2017
13:37:06
)))

Dmitry
29.12.2017
13:37:15
ну вот не сдал ;)

Vasily
29.12.2017
13:37:17
!= - красавчик, хуле

Google

Konstantin
29.12.2017
13:39:02
хм...
задачка антересная

Dmitry
29.12.2017
13:39:06
я же прошу не записи из таблицы связей, категория в которых не равна 5, я прошу "новости, которые не принадлежат 5-й категори"... вполне бизнес формулировка ;)

Konstantin
29.12.2017
13:39:08
дай прикину

Sergey
29.12.2017
13:39:46
но тогда просто джойн
формулировка задачи выстроена так что бы показать что ты дартаньян)

Konstantin
29.12.2017
13:40:26
короч каты берем, новости ляпаем и != cat.id 5

Sergey
29.12.2017
13:40:30

Dmitry
29.12.2017
13:41:13

Evgeniy
29.12.2017
13:41:22
здесь хитрая формулировка. по-моему, наоборот нужно вывести новости с категорией 5

Sergey
29.12.2017
13:41:28

Dmitry
29.12.2017
13:41:34
новости, которые не принадлежат категории с id = 5

Konstantin
29.12.2017
13:41:51
остальным категориям могут принадлежать ?

Dmitry
29.12.2017
13:42:00
еще точнее - новости, которые не входят в категорию с id=5

Sergey
29.12.2017
13:42:16

Dmitry
29.12.2017
13:42:30
любым... могут быть вообще без категории

Konstantin
29.12.2017
13:42:39
ок, допустим новость входит в категорию 5 и 2
а
забей

Google

Konstantin
29.12.2017
13:42:49
туплю

Dmitry
29.12.2017
13:42:52
ну значит она нам не подходит ;)

Alexandr
29.12.2017
13:43:28
select n.* from news n left join news_categories on news_categories.news_id = n.id and news_categories.category_id = 5 where news_categories.category_id is null

Sergey
29.12.2017
13:43:36
NOT EXISTS тебя устроит?)

Konstantin
29.12.2017
13:43:59
select news_id from categories as c
left JOIN news as n on c.id = n.cat_idid
where category_id != 5
что-то где-то так
news id поправь на звездочку
ааа

Dmitry
29.12.2017
13:44:56
not exists меня устроит, но вариант александра красивее и, возмножно, оптимальнее - тут, конечно, анализировать нужно

Konstantin
29.12.2017
13:44:59
я вкурил

Sergey
29.12.2017
13:45:10
SELECT n.id FROM news n
WHERE NOT EXISTS (SELECT 1 FROM news_categories WHERE news_id=n.id AND category_id !+ 5)
чем красивее?)

Konstantin
29.12.2017
13:45:42
но если новость принадлежит c.id = 3, а 3 категория является дочкой id5 - эту новость трогаем ?
или нет

Dmitry
29.12.2017
13:46:01

Konstantin
29.12.2017
13:46:12
тогда моё тоже покатит
но я не уверен в работоспособности запроса )
ибо сплю уже
и джойн по-моему там нужен райт
а не лефт

Google

Anton
29.12.2017
13:47:24
У новости есть еще категории помимо 5, при простом where != 5 новости у которых эта категория не единственная все равно попадут в выборку

Dmitry
29.12.2017
13:47:27
чем красивее?)
в большинстве случаев джойн для оптимизатора лучше, чем подзапрос... не всегда, но опыт развернуть подзапрос в джойн как бы стоит много

Vasily
29.12.2017
13:47:42
я думаю что по сути все кто давал хоть какие то ответы - уже бы подошли. ибо если не с первой, так со второй попытки запрос будет ими создан

Sergey
29.12.2017
13:48:06

Konstantin
29.12.2017
13:48:30

Sergey
29.12.2017
13:48:34

Konstantin
29.12.2017
13:48:35
тз говно

Dmitry
29.12.2017
13:50:51
хз, может справедливо для мускуля, в постгрессе оптимизатор нормально подзапросы мутит
переписывая их в джойны внутри ;)... ну, зависит сильно от многих факторов... просто так получается, что сначала человек учится подзапросам, ибо они выглядят много проще, чем джойны... и начинает лепить страшное... по-этому, если мне человек давал ответ с подзапросом - я спрашивал, а можешь без них, с джойном?... тоже не показатель, но какой-то опыт показывает
тут скорее пример на то, что ON немного шире, чем просто условие связки двух таблиц

Sergey
29.12.2017
13:51:59
ну я тебя понял)

Admin
ERROR: S client not available

Konstantin
29.12.2017
13:52:05
для этого и придумали замечательную табличку с кружочками

Dmitry
29.12.2017
13:52:18
многие это не понимают, в итоге условие, которое идеально подошло бы для ON - у них в WHERE и мы имеем лишние ряды при связывании

Konstantin
29.12.2017
13:52:28
сообразительному человеку - 2 раза взглянуть, чтобы лефт от райта и иннер от аутера отличать

Dmitry
29.12.2017
13:54:26

Konstantin
29.12.2017
13:54:54
если я при эксплейне увижу, что всё плохо, то я переделаю запрос
а до того момента - это нахер не нужно

Константин
29.12.2017
13:55:23
Кто нибудь знает почему ICU для американского языка форматирует валюту слитно с ценой? RUB123, а не RUB 123 ?

Dmitry
29.12.2017
13:55:29
если будешь знать как... а гугл не панацея, ибо еще как-то сформулировать нужно

Konstantin
29.12.2017
13:55:47

Google

Konstantin
29.12.2017
13:55:51
и всё шустро
запрос почти 200 строк

Dmitry
29.12.2017
13:56:32
из той же области задача на нахождение id максимального значения другого поля при группировке

Sergey
29.12.2017
13:56:37

Konstantin
29.12.2017
13:56:37
иногда достаточно один раз показать, а не требовать )

Sergey
29.12.2017
13:56:58
а то меня тут обвеняют в излишней жесткости по отношению к джунам, а у тебя вообще хорошего мидла можно собесить)

Dmitry
29.12.2017
13:57:41

Konstantin
29.12.2017
13:58:18

Dmitry
29.12.2017
13:58:40
но тут тоже на опыт.. один раз увидел где-то, что это можно решать джойном, и отложилось
по крайней мере меня необычность решения этой задачи про максимальное значение настолько в свое время поразила, что я ее помню до сих пор, хотя на практике почти не применял ;)
джун не джун вообще сложное понятие, объем знаний и даже опыта тут не всегда коррелирует
бывают вечные джуны, 10 лет программят где-то, есть опыт кучи базвордов... а такое пишут, что без доскональной проверки сделанного - гарантия получить косяк

Alexandr
29.12.2017
14:02:59

Dmitry
29.12.2017
14:03:30
ну ого гуглится... там джойн с условием на неравенство в ON

Sergey
29.12.2017
14:03:42

Dmitry
29.12.2017
14:04:53
озвучь решение, раз уж начал)
типа такого что-то SELECT s1.article, s1.dealer, s1.price FROM shop s1 LEFT JOIN shop s2 ON s1.article = s2.article AND s1.price < s2.price WHERE s2.article IS NULL; (скопипастил из СО)

Alexandr
29.12.2017
14:06:16

Konstantin
29.12.2017
14:12:08
прикольно )
Серег, а ты ща фрилансишь что ли ?

Vladislav
29.12.2017
14:19:18
Арки его нанял

Konstantin
29.12.2017
14:19:32
@fes0r я хз, пентаграму что ли нарисовать )