я есть таблица Transactions
, которая выглядит примерно так:MySQL из «не» без значения столбца
id Type Field ObjectId NewValue
1 AddLink HasMember 4567 someDomain/someDirectory/1231
2 AddLink HasMember 4567 someDomain/someDirectory/1232
3 AddLink HasMember 4567 someDomain/someDirectory/1233
4 DeleteLink HasMember 4567 someDomain/someDirectory/1231
Числовой конец «NewValue» является то, что я заинтересован в
В. Подробно, мне нужны те записи, где у меня есть запись, где тип - «AddLink», и где не существует более новой записи типа «DeleteLink», то есть записи с id
= 2 или 3 (с 4 удалений 1)
" ObjectId ", а также числовой бит" NewValue ", оба являются идентификаторами записи таблицы «билеты», и мне нужны соответствующие билеты.
я попытался это:
SELECT `Tickets`.* FROM `Transactions` AS `addedLinks`
LEFT JOIN `Tickets` ON RIGHT (`addedLinks`.`NewValue`, 4) = `Tickets`.`id`
WHERE `addedLinks`.`Type` = 'AddLink'
AND `addedLinks`.`Field` = 'Hasmember'
AND `addedLinks`.`ObjectId` = '4567'
AND NOT RIGHT (`addedLinks`.`NewValue`, 4) in (
SELECT `Tickets`.* FROM `Transactions` AS `deletedLinks`
LEFT JOIN `Tickets` ON RIGHT (`deletedLinks`.`NewValue`, 4) = `Tickets`.`id`
WHERE `deletedLinks`.`Type` = 'DeleteLink'
AND `addedLinks`.`id` < `deletedLinks`.`id`
AND `deletedLinks`.`Field` = 'Hasmember'
AND `deletedLinks`.`ObjectId` = '4567')
Это дает мне:
SQL Error (1241): Operand should contain 1 column(s)
Если я не получил что-то неправильно, то проблема заключается в
RIGHT (`addedLinks`.`NewValue`, 4)
в «И НЕ ... in() ".
Может ли кто-нибудь указать мне правильное направление здесь?
[EDIT] Благодаря David K-J, следующие работы:
SELECT `Tickets`.* FROM `Transactions` AS `addedLinks`
LEFT JOIN `Tickets` ON RIGHT (`addedLinks`.`NewValue`, 4) = `Tickets`.`id`
WHERE `addedLinks`.`Type` = 'AddLink'
AND `addedLinks`.`Field` = 'Hasmember'
AND `addedLinks`.`ObjectId` = '5376'
AND NOT (RIGHT (`addedLinks`.`NewValue`, 4)) in (
SELECT `id` FROM `Transactions` AS `deletedLinks`
WHERE `deletedLinks`.`Type` = 'DeleteLink'
AND `addedLinks`.`id` < `deletedLinks`.`id`
AND `deletedLinks`.`Field` = 'Hasmember'
AND `deletedLinks`.`ObjectId` = '5376')
, но я не понимаю, почему?
@PetSerAl, к сожалению, приводит к такой же ошибке. – Burki
Я думаю, что ваш subselect только хочет выбрать поле 'id', то есть' Tickets. * '->' Tickets.id' –
Либо замените ключевое слово 'IN' на' EXISTS' и удалите 'RIGHT (' 'addedLinks'' .''NewValue'', 4) 'или изменить ваш подзапрос, чтобы он возвращал только один столбец. –