Как слева Соединить 2 таблицы, где совпадают 2 поля - PullRequest
0 голосов
/ 24 марта 2019

Я хочу передать данные из cms_nodeinfo.description К wp_postmeta.meta_value ТОЛЬКО ЕСЛИ cms_nodeinfo.nodeid **MATCHES** wp_postmeta.post_id И , если wp_postmeta.meta_key **EQUALS** '_yoast_wpseo_metadesc'

Вот пример запроса, который я пробовал:

SELECT
    cms_nodeinfo.description, wp_postmeta.meta_value
FROM
    cms_nodeinfo, wp_postmeta
WHERE
    cms_nodeinfo.nodeid = wp_postmeta.post_id
    wp_postmeta.meta_key = _yoast_wpseo_metadesc 

пс. Ребята, я НЕ кодер, я учусь на ходу, пожалуйста, будьте терпеливы со мной. Спасибо.

Ладно, вот так, я думаю, но мне нужна помощь с фактическим синтаксисом, который я мог бы вставить в запрос:

SELECT cms_nodeinfo.description 
FROM cms_nodeinfo 
LEFT JOIN wp_postmeta ON cms_nodeinfo.description = wp_postmeta.meta_value 
WHERE wp_postmeta.meta_key = _yoast_wpseo_metadesc AND cms_nodeinfo.nodeid = wp_postmeta.post_id

Я тоже пытался

SELECT
   cms_nodeinfo.description
FROM
   cms_nodeinfo
LEFT JOIN cms_nodeinfo.description ON
   wp_postmeta.meta_value
WHERE
   wp_postmeta.meta_key = _yoast_wpseo_metadesc AND cms_nodeinfo.nodeid = wp_postmeta.post_id

но это вернуло ошибку, сказав что

Table 'cms_nodeinfo.description' doesn't exist

Имена таблиц: cms_nodeinfo и wp_postmeta. Цель состоит в том, чтобы получить поле описания из передачи cms_nodeinfo в поле meta_value таблицы wp_postmeta.

Я тоже пробовал:

SELECT
    `description`
FROM
    cms_nodeinfo
LEFT JOIN wp_postmeta.meta_value WHERE // LINE 5
    wp_postmeta.meta_key = _yoast_wpseo_metadesc AND cms_nodeinfo.nodeid = wp_postmeta.post_id 

но это возвращает следующую ошибку:

 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'WHERE
    wp_postmeta.meta_key = _yoast_wpseo_metadesc AND cms_nodeinfo.nodeid ' at line 5 

Я тоже пробовал:

SELECT
    `description`
FROM
    cms_nodeinfo
WHERE
    wp_postmeta.meta_key = `_yoast_wpseo_metadesc` AND cms_nodeinfo.nodeid = wp_postmeta.post_id
LEFT JOIN cms_nodeinfo.description ON //LINE7
    wp_postmeta.meta_value


but that returns:
 check the manual that corresponds to your MariaDB server version for the right syntax to use near 'LEFT JOIN cms_nodeinfo.description ON
    wp_postmeta.meta_value LIMIT 0, 25' at line 7 (marked)

Я тоже пробовал:

SELECT `cms_nodeinfo`.`description`, `wp_postmeta`.`meta_key`, `cms_nodeinfo`.`nodeid`
FROM `cms_nodeinfo`, `wp_postmeta`
LEFT JOIN `wp_postmeta`.`meta_value`
WHERE `wp_postmeta`.`meta_key` = '_yoast_wpseo_metadesc' AND `cms_nodeinfo`.`nodeid` = `wp_postmeta`.`post_id`;  //LINE4


which returns a syntax error in line 4 (marked)

Я также пробовал:

SELECT
    `cms_nodeinfo`.`description`,
    `wp_postmeta`.`meta_key`,
    `cms_nodeinfo`.`nodeid`
FROM
    `cms_nodeinfo`,
    `wp_postmeta`
LEFT JOIN `cms_nodeinfo.description`
  ON `wp_postmeta`.`meta_value` 
 WHERE
    `wp_postmeta`.`meta_key` = '_yoast_wpseo_metadesc' AND `cms_nodeinfo`.`nodeid` = `wp_postmeta`.`post_id`;

Я тоже пробовал:

REPLACE `meta_value` WITH `cms_nodeinfo`.`description`, WHERE `wp_postmeta`.`meta_key` = '_yoast_wpseo_metadesc' AND `cms_nodeinfo`.`nodeid` = `wp_postmeta`.`post_id`;

@ Мартин предложил:

ОТ tbl СЛЕДУЮЩЕЕ СОЕДИНЕНИЕ x ON x.a = tbl.a И x.b = tbl.b

Итак, я попробовал это здесь:

FROM                 //POSITION 0
    `cms_nodeinfo`,
LEFT JOIN `cms_nodeinfo.description`
ON `wp_postmeta`.`meta_value` 
 WHERE
    `wp_postmeta`.`meta_key` = '_yoast_wpseo_metadesc' AND `cms_nodeinfo`.`nodeid` = `wp_postmeta`.`post_id`;


which returned the error:
Unrecognized statement type. (near "FROM" at position 0)

Может быть, я использую неправильный тип соединения? Я тоже попробовал INNER JOIN, и это тоже не сработало.

SELECT
    `cms_nodeinfo`.`description`,
    `wp_postmeta`.`meta_key`,
    `cms_nodeinfo`.`nodeid`
FROM
    `cms_nodeinfo`,
    `wp_postmeta`
INNER JOIN `wp_postmeta`.`meta_value` WHERE
    `wp_postmeta`.`meta_key` = '_yoast_wpseo_metadesc' AND `cms_nodeinfo`.`nodeid` = `wp_postmeta`.`post_id`;

Хорошо, это успешно выполняется, но данные не возвращаются

SELECT
    `cms_nodeinfo`.`description`
FROM
    `cms_nodeinfo`
LEFT JOIN `wp_postmeta` ON `wp_postmeta`.`meta_value` = `cms_nodeinfo`.`description`
WHERE
    `wp_postmeta`.`meta_key` = '_yoast_wpseo_metadesc' AND `cms_nodeinfo`.`nodeid` = `wp_postmeta`.`post_id`;  

Я также попробовал RIGHT Join, INNER и FULL, но все они терпят неудачу. Поле есть, но я не могу получить данные для его заполнения.

Есть идеи? Помогите, пожалуйста?!

1 Ответ

0 голосов
/ 24 марта 2019

Вы можете обновить при условиях, которые вы установили с помощью:

update 
  wp_postmeta inner join cms_nodeinfo
  on cms_nodeinfo.nodeid = wp_postmeta.post_id
set
  wp_postmeta.meta_value = cms_nodeinfo.description
where wp_postmeta.meta_key = '_yoast_wpseo_metadesc'
...