Как удалить с помощью Join EXASol

Я хочу удалить некоторые записи из таблицы, используя Join в EXAsol.

Я пытаюсь -

Delete tran
FROM 
Transactions tran
INNER JOIN 
Employees e
ON tran.ID = e.Transaction_ID
WHERE e.Name = 'Abhisar';

Ошибка, которую я получаю, -

syntax error, unexpected identifier_chain2, expecting FROM_ or '*' [line 1,column 8]

person Abhisar Garg    schedule 25.09.2018    source источник
comment
Ну, я ничего не знаю об exasolution (первый раз даже заметил этот тег). Но я не ожидал увидеть Transaction_ID в таблице сотрудников? Не будет ли это больше похоже на JOIN Employees e ON t.emp_id = e.emp_id? Кстати, я не знаю, но может быть tran может быть зарезервированным словом в exasolution? Как какое-то сокращение от transaction?   -  person LukStorms    schedule 25.09.2018
comment
@LukStorms Select * работает, так что присоединиться не проблема. Также изменена аббревиатура с tran на кучу других слов. Все та же проблема.   -  person Abhisar Garg    schedule 25.09.2018
comment
Я ничего не знаю о синтаксисе SQL, который он использует. Но, возможно, вместо этого использовать IN? Ф.э. DELETE * FROM Transactions WHERE ID IN (SELECT Transaction_ID FROM Employees WHERE Name = 'Abhisar') `   -  person LukStorms    schedule 25.09.2018
comment
@LukStorms Это утверждение отлично работает в SQL. Это просто Exasol (который в основном представляет собой SQL), в котором я столкнулся с этой проблемой. Ничего, буду ждать ответа.   -  person Abhisar Garg    schedule 25.09.2018
comment
Как насчет DELETE FROM Transactions WHERE ID IN (SELECT Transaction_ID FROM Employees WHERE Name = 'Abhisar'), совместимого с ANSI SQL? (Т.е. предложение LukStorm, но без *.)   -  person jarlh    schedule 25.09.2018
comment
@jarlh Да, это можно сделать. Но это будет намного медленнее, чем функция соединения.   -  person Abhisar Garg    schedule 25.09.2018


Ответы (2)


DELETE FROM tab1 a 
WHERE EXISTS (SELECT 1 FROM tab2 b WHERE a.id=b.id);

Это так же хорошо, как JOIN, и использует индекс внутри. Вы можете проверить это, если включите профилирование и проверите его после выполнения запроса.

person wildraid    schedule 25.09.2018

Исходное сообщение об ошибке возникает из-за того, что «TRAN» следует сразу за «DELETE» — см. руководство пользователя Exasol — единственными допустимыми параметрами ANSI SQL для DELETE являются «DELETE FROM..» или «DELETE * FROM...»

Затем существуют различные варианты, как описано выше, для выбора записей, которые необходимо удалить. Лично я предпочитаю использовать метод WHERE .. IN..(SELECT...), так как считаю его более понятным и, следовательно, более простым в обслуживании.

person Dave S    schedule 26.09.2018