आपको वास्तव में अपनी स्कीमा पर अधिक ध्यान से विचार करने की आवश्यकता है। दिनांक समय कॉलम को समान नाम देने और फिर इस तरह की क्वेरी चलाने पर विचार करें - http:/ /sqlfiddle.com/#!2/a3b4c/7/0
SELECT selection, id, datetimefoo, user FROM (
SELECT
1 AS selection,
table1.id, table1.datetimefoo,
table3.user
FROM table1
LEFT OUTER JOIN table2
ON table1.id = table2.table1id
LEFT OUTER JOIN table3
ON table1.id = table3.id
UNION
SELECT
2 AS selection,
table1.id, table1.datetimefoo,
table3.user
FROM table1
INNER JOIN table2
ON table1.id = table2.table1id
INNER JOIN table3
ON table1.id = table3.id
) AS T2
ORDER BY datetimefoo DESC
एसक्यूएल फिडेल में यह आप जो खोज रहे हैं उसके करीब परिणाम उत्पन्न करता है। मुझे अभी भी यकीन नहीं है कि आपको दूसरी क्वेरी पर इनर जॉइन की आवश्यकता क्यों है - ऐसा कुछ भी नहीं है जो आप यहां कर रहे हैं जिसके लिए उनकी आवश्यकता है।
यहां एक और तरीका है जिसके लिए कॉलम नामों को बदलने की आवश्यकता नहीं है, लेकिन सॉर्ट करने योग्य कॉलम के लिए उपनाम की आवश्यकता है - http://sqlfiddle.com/#!2/ec4bc/3/0
SELECT * FROM (
SELECT
1 AS selection,
table1.id, table1.datetimefoo AS sort_date, -- alias on first table's date
table2.datetimebar,
table3.user
FROM table1
LEFT OUTER JOIN table2
ON table1.id = table2.table1id
LEFT OUTER JOIN table3
ON table1.id = table3.id
UNION
SELECT
2 AS selection,
table1.id, table1.datetimefoo,
table2.datetimebar AS sort_date, -- alias on second table's date
table3.user
FROM table1
INNER JOIN table2
ON table1.id = table2.table1id
INNER JOIN table3
ON table1.id = table3.id
) AS T2
ORDER BY sort_date DESC