Просто JOIN
в таблице cross_check
.
SELECT t_one.*
FROM t_one
JOIN cross_check ON t_one.guid=cross_check.guid
WHERE t_one.lastmod != cross_check.lastmod
Тем не менее, по-прежнему один запрос на таблицу (можно объединяться с объединениями, но это не уменьшает основное количество запросов).
Если вы хотите объединить их в одно, вы можете использовать UNION:
[query for t_one]
UNION
[query for t_two]
UNION
[query for t_three]
Я чувствую, что это не так уж и эффективно, как выполнение трех разных запросов (хотя это внутреннее чувство, необоснованное утверждение).
Вы также можете это сделать (хотя это работает только в том случае, если между t_*
guid
с нет перехода; если есть t_one
, то предпочтение будет отдано t_two
):
SELECT COALESCE(t_one.guid,t_two.guid,t_three.guid) AS guid
FROM cross_check
LEFT JOIN t_one ON t_one.guid=cross_check.guid
LEFT JOIN t_two ON t_two.guid=cross_check.guid
LEFT JOIN t_three ON t_three.guid=cross_check.guid
WHERE (t_one.lastmod IS NOT NULL AND t_one.lastmod != cross_check.lastmod)
OR (t_two.lastmod IS NOT NULL AND t_two.lastmod != cross_check.lastmod)
OR (t_three.lastmod IS NOT NULL AND t_three.lastmod != cross_check.lastmod)
Вы также можете поставить COALESCE(t_one.name, t_two.pet, t_three.fruit) AS label
, если хотите захватить ярлыки, а не идентификаторы.