Size: a a a

Saint P Ruby Community

2020 December 08

w

wi11son in Saint P Ruby Community
угу
источник

w

wi11son in Saint P Ruby Community
так вон глянь выше,
SELECT "boards".* FROM "boards" WHERE "boards"."id" NOT IN (SELECT previous_board_id AS id FROM "boards")
вот эта же штука должна работать, правильно?
источник

w

wi11son in Saint P Ruby Community
короче я лох какой-то видимо в sql
источник

M

Memumen in Saint P Ruby Community
да
источник

w

wi11son in Saint P Ruby Community
ну а как нужно в таком случае?
источник

M

Memumen in Saint P Ruby Community
но она тебе ничего не даст
источник

M

Memumen in Saint P Ruby Community
ты пытаешь выбрать айди которые не включены в тот же самый набор айдишек
источник

M

Memumen in Saint P Ruby Community
ааа
источник

AY

Alexey Yaroslavzev in Saint P Ruby Community
выглядит так, что pluck возврщает массив
источник

w

wi11son in Saint P Ruby Community
источник

AY

Alexey Yaroslavzev in Saint P Ruby Community
которые потом вставляется в sql запрос
источник

w

wi11son in Saint P Ruby Community
фак, дело действительно в not null
источник

M

Memumen in Saint P Ruby Community
опередил
источник

w

wi11son in Saint P Ruby Community
сработало
источник

w

wi11son in Saint P Ruby Community
Board.where.not(id: Board.select(:previous_board_id).where.not(previous_board_id: nil)).count
D, [2020-12-08T16:00:32.642575 #4] DEBUG -- :    (1.5ms)  

SELECT COUNT(*) FROM "boards"
WHERE "boards"."id"
NOT IN (
 SELECT "boards"."previous_board_id"
 FROM "boards"
 WHERE "boards"."previous_board_id" IS NOT NULL
)
=> 53
источник

AY

Alexey Yaroslavzev in Saint P Ruby Community
wi11son
фак, дело действительно в not null
я вообще не правильно понял проблему=)
источник

f🤔

focusshifter 🤔 in Saint P Ruby Community
wi11son
а если через рубишный запрос
Board.where.not(id: Board.distinct.pluck(:previous_board_id)).count

D, [2020-12-08T15:38:53.992477 #4] DEBUG -- :    (1.7ms)  SELECT DISTINCT “boards”.“previous_board_id” FROM “boards”
D, [2020-12-08T15:38:54.001051 #4] DEBUG -- :    (2.2ms)  SELECT COUNT(*) FROM “boards” WHERE NOT ((“boards”.“id” IN ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, $17, $18, $19, $20, $21, $22, $23, $24, $25, $26, $27, $28, $29, $30, $31, $32, $33, $34, $35, $36, $37, $38, $39, $40, $41, $42, $43, $44, $45, $46, $47, $48, $49, $50, $51, $52, $53, $54, $55, $56, $57, $58, $59, $60, $61, $62, $63, $64, $65, $66, $67, $68, $69, $70, $71, $72, $73, $74, $75, $76, $77, $78, $79, $80, $81, $82, $83, $84, $85, $86, $87, $88, $89, $90, $91, $92, $93, $94, $95, $96, $97, $98, $99, $100, $101, $102, $103, $104, $105, $106, $107, $108, $109, $110, $111, $112, $113, $114, $115, $116, $117, $118, $119, $120, $121, $122, $123, $124, $125, $126, $127, $128, $129) OR “boards”.“id” IS NULL))  [[“id”, 228], [“id”, 384], [“id”, 294], [“id”, 394], [“id”, 272], [“id”, 304], [“id”, 448], [“id”, 70], [“id”, 382], [“id”, 162], [“id”, 378], [“id”, 341], [“id”, 386], [“id”, 450], [“id”, 322], [“id”, 406], [“id”, 405], [“id”, 170], [“id”, 389], [“id”, 176], [“id”, 169], [“id”, 276], [“id”, 345], [“id”, 237], [“id”, 180], [“id”, 451], [“id”, 292], [“id”, 323], [“id”, 337], [“id”, 238], [“id”, 236], [“id”, 399], [“id”, 454], [“id”, 452], [“id”, 227], [“id”, 390], [“id”, 173], [“id”, 401], [“id”, 239], [“id”, 235], [“id”, 161], [“id”, 286], [“id”, 306], [“id”, 328], [“id”, 279], [“id”, 291], [“id”, 457], [“id”, 298], [“id”, 244], [“id”, 232], [“id”, 172], [“id”, 324], [“id”, 242], [“id”, 331], [“id”, 251], [“id”, 404], [“id”, 104], [“id”, 171], [“id”, 456], [“id”, 388], [“id”, 165], [“id”, 397], [“id”, 296], [“id”, 179], [“id”, 297], [“id”, 181], [“id”, 466], [“id”, 407], [“id”, 333], [“id”, 325], [“id”, 35], [“id”, 395], [“id”, 387], [“id”, 107], [“id”, 445], [“id”, 233], [“id”, 163], [“id”, 168], [“id”, 400], [“id”, 223], [“id”, 219], [“id”, 241], [“id”, 393], [“id”, 221], [“id”, 285], [“id”, 327], [“id”, 464], [“id”, 312], [“id”, 167], [“id”, 231], [“id”, 290], [“id”, 391], [“id”, 317], [“id”, 284], [“id”, 458], [“id”, 342], [“id”, 459], [“id”, 243], [“id”, 166], [“id”, 344], [“id”, 385], [“id”, 410], [“id”, 46], [“id”, 224], [“id”, 383], [“id”, 336], [“id”, 222], [“id”, 381], [“id”, 183], [“id”, 313], [“id”, 164], [“id”, 254], [“id”, 248], [“id”, 411], [“id”, 392], [“id”, 453], [“id”, 217], [“id”, 218], [“id”, 234], [“id”, 403], [“id”, 177], [“id”, 256], [“id”, 332], [“id”, 182], [“id”, 106], [“id”, 64], [“id”, 110], [“id”, 380], [“id”, 178]]
=> 53
закину еще что второй вариант еще и индексы будет игнорировать, насколько я помню
источник

f🤔

focusshifter 🤔 in Saint P Ruby Community
если список для in больше ~сотни элементов
источник

w

wi11son in Saint P Ruby Community
он пожалуй может быть супербольшим, поэтому я и искал решение, которое средствами SQL это сделает
источник

f🤔

focusshifter 🤔 in Saint P Ruby Community
https://dba.stackexchange.com/questions/91247/optimizing-a-postgres-query-with-a-large-in/91539#91539
нашел сорс, я на это как-то напарывался
источник