Как заметил Оуа, выражение оператора ({ ... })
является расширением GNU; вы не сможете это использовать. Ваше основное выражение близко к тому, что требуется, но не хватает скобок:
#define container_of(ptr, type, member) \
((type *) ((char *)(ptr) - offsetof(type, member)))
Это выглядит чисто для меня. Он распространяется только через две строки для SO.
Если вы хотите, чтобы заказы были только в таблице, вы можете использовать group by
и having
:
select order_id
from t
group by order_id
having sum(case when status = 'COMPLETE' then 1 else 0 end) = 0;
Если вы хотите выполнить это для всех заказов, то я предполагаю, что у вас есть orders
табл. Используйте not exists
:
select o.*
from orders o
where not exists (select 1
from orderstatuses os
where os.order_id = o.order_id and
os.status = 'COMPLETE'
);
Я думаю, что этот вопрос требует команды МИНУС.
Select distinct(order_id)
from {table_name}
MINUS
Select distinct(order_id)
from (table_name}
where status = 'Complete'
Вы можете взять выходные данные из этого SQL и использовать их для дальнейших запросов, при необходимости.