Вы можете использовать компилятор C ++, такой как gcc, для компиляции вашего кода на C. Вот хорошая статья со ссылками на бесплатные компиляторы C / IDE:
http://computerprogramming.suite101.com/article.cfm/freeprogrammingtools
Select ID, Cat, Price, Name, Abbrv
From
(SELECT t1.ID, t1.Cat, t1.Price, t1.Price AS SortPrice, NULL as Name, NULL as Abbrv
FROM t1
UNION
SELECT t2.ID, NULL as Cat, NULL as Price, t1.Price as SortPrice, t2.Name, t2.Abbrv
FROM t2
inner join t1 on t2.id = t1.id
) t3
ORDER BY SortPrice DESC, Abbrv ASC
Somehow you have to know the data in table 2 are linked to table 1 and share the price. Since the Null in abbrv will come first, there is no need to create a SortAbbrv column.
Быстрое решение - сделать 2 вставки во временную таблицу или таблицу переменную, и как часть вставки во временную таблицу вы можете установить столбец флагов, чтобы облегчить сортировку, а затем упорядочить по этому столбцу флагов.
В верхней части моей головы я бы сказал, что в худшем случае вы создаете временную таблицу со всеми полями, выполняете INSERT INTO временную таблицу из T1 и T2, а затем SELECT из temp таблица с заказом по.
т.е. Создайте временную таблицу (например, #temp) с полями Id, Cat, Price, Name, Abbrv, а затем:
SELECT Id, Cat, Price, null, null INTO #temp FROM T1
SELECT Id, null, null, Name, Abbrv INTO #temp FROM T2
SELECT * FROM #temp ORDER BY Id, Price DESC, Abbrv ASC
NB: я не на 100% уверен в синтаксисе null из вставок, но думаю, что это сработает .
РЕДАКТИРОВАТЬ: Добавлен заказ по цене и сокращению после идентификатора ... если идентификатор не связывает T1 и T2, что делает?
Вы должны использовать UNION ALL вместо UNION, чтобы сэкономить на проверке дубликатов.
SELECT *
FROM
(
SELECT t1.ID, t1.Cat, t1.Price, NULL as Name, NULL as Abbrv FROM t1
UNION ALL
SELECT t2.ID, NULL as Cat, NULL as Price, t2.Name, t2.Abbrv FROM t2
) as sub
ORDER BY
ID,
CASE WHEN Price is not null THEN 1 ELSE 2 END,
Price DESC,
CASE WHEN Abbrv is not null THEN 1 ELSE 2 END,
Abbrv ASC