MySQL выбрать и сопоставить две таблицы и обновить столбец на основе сопоставленных данных - PullRequest
0 голосов
/ 09 января 2020

Кажется, мне трудно, поэтому мне нужна ваша помощь. В общем, я получил две таблицы с именами xp_pn_resale и xp_guru_properties. Что мне нужно сделать, это обновить или установить столбец postal_code из таблицы xp_pn_resale на основе данных из другой таблицы. Итак, вот мои таблицы

Моя таблица xp_pn_resale. Я написал запрос таким образом, чтобы показать вам

SELECT postal_code, 
block,
concat(block,' ', street_name) as address 
FROM xp_pn_resale 
where street_name like '%ANG MO KIO%';

И я получил такой результат

enter image description here

Как вы можете видеть, там есть значения null, и есть некоторые postal_code, которые имеют значения, потому что я вручную обновляю их на основе того, что я искал. Я просто хочу автоматически заполнить postal_code из запроса, полученного из другой таблицы.

Вот моя таблица xp_guru_properties, и я написал такой запрос, чтобы показать вам

SELECT property_name as GURU_PROEPRTY_NAME,
property_type as GURU_PROPERTY_TYPE ,
JSON_UNQUOTE(JSON_EXTRACT(xp_guru_properties.json, '$.postcode') )as GURU_POSTCODE
FROM xp_guru_properties
where property_type like '%HDB%' AND property_name like '%ang mo kio%';   

И результат такой:

enter image description here

xp_guru_properties получил столбец property_type, который немного похож на конкатенированные столбцы block и street_name из другой таблицы, которую я назвал GURU_PROPERTY_NAME.

Как видите, существует виртуальный столбец с именем GURU_POSCODE. Значения этого столбца - это то, что я хочу заполнить в столбце postal_code из таблицы xp_pn_resale. Я делал это вручную, чтобы обновить postal_code, выполнив

UPDATE xp_pn_resale 
SET postal_code = 560110 
WHERE street_name LIKE '%ANG MO KIO%' 
AND block = 110

, что очень утомительно для меня. Кто-нибудь знает, как я могу автоматически обновить его на основе запросов, которые я показал? Помощь будет оценена.

РЕДАКТИРОВАТЬ: я написал JOIN запрос, как это, но это для записи Lingkong Tiga, которую я вручную заполнил все postal_code

select distinct 
JSON_UNQUOTE(json_extract(g.json, '$.postcode')) postcode,
JSON_UNQUOTE(json_extract(g.json, '$.name')) name,
JSON_UNQUOTE(json_extract(g.json, '$.streetnumber') )streetnumber,
p.block, p.street_name, p.postal_code
from xp_pn_resale p
inner join xp_guru_properties g 
    on g.property_name = concat(p.block, ' ', p.street_name)
    where g.property_type like '%HDB%' AND g.property_name like '%Lengkong Tiga%'

I получил такой результат enter image description here

1 Ответ

2 голосов
/ 09 января 2020

Соедините две таблицы и обновите.

UPDATE xp_pn_resale AS r
JOIN xp_guru_properties AS p ON concat(r.block,' ', r.street_name) = p.property_name
SET r.postal_code = JSON_UNQUOTE(JSON_EXTRACT(xp_guru_properties.json, '$.postcode') )
WHERE r.street_name like '%ANG MO KIO%'
AND p.property_type like '%HDB%' AND p.property_name like '%ang mo kio%'
AND r.postal_code IS NULL
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...