2016-08-24 3 views
-1

Я пытаюсь построить оператор select. Структура таблицы показана ниже. Я в основном смотрю, чтобы выбрать три поля в левой таблице вместе с meta_values ​​таблицы с правой стороны, которые имеют meta_key ответственного_сервиса и ответственного_очень. Эти meta_values ​​могут существовать или не существовать.MySQL multple выбирает вторую таблицу

Моя ужасная попытка выглядит так. Любая помощь будет большой.

SELECT 
`wp_posts`.`ID`, 
`wp_posts`.`post_content`, 
`wp_posts`.`post_title` 
FROM(
`wp_posts` 
INNER JOIN `wp_postmeta` ON (`wp_posts`.`ID` = `wp_postmeta`.`post_id`), 
(Select `wp_postmeta`.meta_value where`wp_postmeta`.meta_key='responsible_officer') as Responsible Officer), 
(Select `wp_postmeta`.meta_value where `wp_postmeta`.meta_key='responsible_service') as Responsible Service), 

enter image description here

Результат должен выглядеть так

enter image description here

Благодарности

+1

Редактировать ваш вопрос и показать результат, который вы хотите. Ваш запрос не на 100% ясен. –

+0

использовать левое внешнее соединение добавить условие в ON предложение – rocks

+0

Ваш запрос не заканчивается. Это просто ... – Strawberry

ответ

1

Это даст вам 1 или несколько строк в wp_posts. ID в зависимости от того, сколько «ответственных_офитеров» и «ответственных_сервисов» найдено. Если не найдены meta_key и meta_value будет null

SELECT 
`wp_posts`.`ID`, 
`wp_posts`.`post_content`, 
`wp_posts`.`post_title`, 
max(case `wp_postmeta`.meta_key 
    when 'responsible_officer' then `wp_postmeta`.meta_value end) as responsible_officer, 
max(case `wp_postmeta`.meta_key 
    when 'responsible_service' then `wp_postmeta`.meta_value end) as responsible_service 
FROM 
`wp_posts` 
LEFT JOIN `wp_postmeta` ON `wp_posts`.`ID` = `wp_postmeta`.`post_id` 
         AND `wp_postmeta`.meta_key in ('responsible_officer', 'responsible_service') 

    group by `wp_posts`.`ID`, 
    `wp_posts`.`post_content`, 
    `wp_posts`.`post_title`; 
+0

Я обновил изображение, чтобы показать, что я хочу, чтобы «ответственный_оченьный» и «ответственный_сервис» выбран как отдельные объекты, имеет ли это смысл? –

+0

@killie Да, с CASE и группой. Так что только нулевой или один ответственный офицер и нуль или один ответственный_сервис за ID? – vercelli

+0

Получение синтаксической ошибки в строке 9 –

0

Проверить это также:

select postmeta.meta_value, posts.ID, posts.`post_content`, 
posts.`post_title` from `wp_posts` posts join `wp_postmeta` postmeta on posts.ID = postmeta.post_id where postmeta.meta_key IN ('responsible_officer', 'responsible_service') 
0
SELECT 
`wp_posts`.`ID`, 
`wp_posts`.`post_content`, 
`wp_posts`.`post_title` 
FROM `wp_posts` 
JOIN `wp_postmeta` ON (`wp_posts`.`ID` = `wp_postmeta`.`post_id`) 
where `wp_postmeta`.meta_key in ('responsible_officer', 'responsible_service') 
+0

Просьба представить объяснение с вашим кодом, чтобы OP мог учиться на нем. – EBH

Смежные вопросы