СОЮЗ ВСЕХ на Столе

Недавно я узнал, как использовать команду UNION ALL. Тем не менее, я не знаю, как использовать его с объединением.

Может кто-нибудь показать мне, как изменить запрос ниже, чтобы он выполнял левое соединение для ДВУХ таблиц — gw_articles_usa и gw_articles_canada?

$stm = $pdo->prepare("SELECT WT.N, WT.URL, WT.Title,
USA.URL, USA.Brief, USA.Article, USA.Pagedex, USA.Links
FROM gw_topics WT
LEFT JOIN gw_articles_usa USA ON USA.URL = WT.URL
WHERE WT.URL = :MyURL");
$stm->execute(array(
'MyURL'=>$MyURL
));

0

Решение

При условии, что таблицы usa и canada имеют одинаковые имена и типы столбцов, используйте объединение во вспомогательном элементе.

SELECT WT.N, WT.URL, WT.Title,
COUNTRY.URL, COUNTRY.Brief, COUNTRY.Article,
COUNTRY.Pagedex, COUNTRY.Links
FROM gw_topics WT
LEFT JOIN (select * from gw_articles_usa UNION ALL select * from gw_articles_canada) COUNTRY
ON COUNTRY.URL = WT.URL
WHERE WT.URL = :MyURL

Если две таблицы не совпадают, вы можете использовать псевдонимы для имен столбцов, чтобы они соответствовали, или использовать константу / ноль для отсутствующего значения столбца и псевдоним для имени другой таблицы. Если типы данных не совпадают, CAST или другие функции преобразования могут быть использованы для их совпадения. Если ссылки отсутствовали в одной из таблиц, вы можете сделать это.

select  URL, Brief, Article, Pagedex, Links from gw_articles_usa
UNION ALL
select URL, Brief, Article, Pagedex, null as Links from gw_articles_canada

Это должно решить вашу проблему.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]