Проблема, с которой вы можете столкнуться, состоит в том, что у вас может быть много строк host_data для каждого гостя, поэтому вы должны использовать агрегатную функцию (я использовал max ниже), чтобы добраться до одной строки, из которой вы хотите получить host_id. Я скорее специалист по SQL Server, но я думаю, что этот синтаксис довольно близок к тому, что вы будете использовать в MySQL. Вот мой выбор:
SELECT g.link_id,
(
SELECT MAX(h.host_id)
FROM guest_data d
INNER JOIN host_data h ON d.guest_nm=hhost_nm
GROUP BY h.venue_nm
HAVING COUNT(*) = 1
) AS x
FROM guest g
WHERE g.guest_id IN
(
SELECT d.guest_id
FROM guest_data d
INNER JOIN host_data h ON d.guest_nm=hhost_nm
GROUP BY h.venue_nm
HAVING COUNT(*) = 1
)
После проверки, что select возвращает правильный набор результатов, вы можете легко преобразовать его в оператор UPDATE:
UPDATE guest g
SET link_id=
(
SELECT MAX(h.host_id)
FROM guest_data d
INNER JOIN host_data h ON d.guest_nm=hhost_nm
WHERE d.guest_id=g.guest_id
GROUP BY h.venue_nm
HAVING COUNT(*) = 1
)
WHERE g.guest_id IN
(
SELECT d.guest_id
FROM guest_data d
INNER JOIN host_data h ON d.guest_nm=hhost_nm
GROUP BY h.venue_nm
HAVING COUNT(*) = 1
)
Я надеюсь, что это достаточно близко, чтобы помочь ...