Это не так сложно.Ваш первый запрос, вы присоединяетесь к mel, но никогда ничего не делаете с ним, поэтому вы только получаете данные Бер.Ваш последний запрос ближе, но поскольку вы внутренне объединяетесь с ягодами и дынями и у вас нет отчетов, которые оба , вы не получите результатов.Но ответ ближе к тому, что вы делаете во втором запросе, и я думаю, что вы хотите, это:
SELECT
rpt.*,
COALESCE(ber.shipper, mel.shipper) AS shipper,
COALESCE(ber.po, mel.po) AS po,
COALESCE(ber.commodity, mel.commodity) AS commodity,
COALESCE(ber.label, mel.label) AS label
FROM reports rpt
LEFT JOIN berries ber ON rpt.inspection_number = ber.report_key
LEFT JOIN melons mel ON rpt.inspection_number = mel.report_key
WHERE rpt.status='1' OR rpt.status='0'
ORDER BY rpt.inspection_number DESC
Этот запрос говорит, дать мне строки, где есть соединение ягод или дынь,но для столбцов, которые у них общие, дайте мне, какой бы он ни был.Сначала мы берем ber без особой причины.
Предполагая, что эти две таблицы взаимоисключающие, я думаю, что это то, что вы хотите.
Редактировать : построение на@MarcusAdams указывает на то, что это можно переписать, чтобы использовать UNION
, если существует отвратительное количество таблиц фруктов:
SELECT report_key, shipper, po, commodity, label FROM berries
UNION
SELECT report_key, shipper, po, commodity, label FROM melons
UNION
SELECT report_key, shipper, po, commodity, label FROM ...
...
Этот запрос даст вам что-то удобное, что вы можете использовать как подзапросвид) позже.Вы также можете жестко закодировать имя источника следующим образом:
SELECT report_key, shipper, po, commodity, label, 'berries' AS type FROM berries
UNION
SELECT report_key, shipper, po, commodity, label, 'melons' FROM melons
UNION
SELECT report_key, shipper, po, commodity, label, '...' FROM ...
...
Затем, чтобы использовать это в своем исходном запросе, вы должны встроить его так:
SELECT *
FROM reports rpt,
JOIN (SELECT report_key, shipper, po, commodity, label, 'berries' AS type FROM berries
UNION
SELECT report_key, shipper, po, commodity, label, 'melons' FROM melons
UNION
SELECT report_key, shipper, po, commodity, label, '...' FROM ...
...) fruits ON rpt.inspection_number = fruits.report_key
WHERE rpt.status='1' OR rpt.status='0'
ORDER BY rpt.inspection_number DESC