Это похоже на СОЮЗ двух разных запросов ко мне. Я предполагаю, что столбцы идентификаторов никогда не содержат отрицательных значений.
SELECT A.A_id, A.Cost1, A.A1_id, A.Cost2, B.Fname, B.Lname, C.Town
FROM Table_A AS A
INNER JOIN Table_B AS B ON A.A1_id = B.B_id
LEFT OUTER JOIN Table_C AS C ON A.A_id = C.C_id
WHERE A.A1_id != 0
AND C.C_id < 0
UNION
SELECT A.A_id, A.Cost1, A.A1_id, A.Cost2, B.Fname, B.Lname, C.Town
FROM Table_A AS A
LEFT OUTER JOIN Table_B AS B ON A.A1_id = B.B_id
INNER JOIN Table_C AS C ON A.A_id = C.C_id
WHERE A.A1_id = 0
AND B.B_id < 0;
Я не совсем уверен в этой формулировке. Существует вероятность того, что условия для B.B_id <0 и C.C_id <0 необходимо связать с соответствующими предложениями ON. </p>
Существует также хороший шанс, что использование двух левых внешних объединений в одном SELECT с соответствующими фильтрами OR приведет к правильному результату.