У меня есть две таблицы со следующей структурой:Как присоединиться к этим двум таблицам в MySQL
|=================|
| posts |
|=================|
| ID | Title |
|-----------------|
| 1 | Title #1 |
|-----------------|
| 2 | Title #1 |
|-----------------|
| 3 | Title #1 |
|-----------------|
| 4 | Title #1 |
|-----------------|
| 5 | Title #1 |
|-----------------|
и
|==========================================|
| meta |
|==========================================|
| id | post_id | meta_key | meta_value |
|------------------------------------------|
| 1 | 1 | key_one | value for #1 |
|------------------------------------------|
| 2 | 1 | key_two | value for #1 |
|------------------------------------------|
| 3 | 1 | key_three | value for #1 |
|------------------------------------------|
| 4 | 2 | key_one | value for #2 |
|------------------------------------------|
| 5 | 2 | key_three | value for #2 |
|------------------------------------------|
| 6 | 3 | key_one | value for #3 |
|------------------------------------------|
| 7 | 3 | key_three | value for #3 |
|------------------------------------------|
и мне нужно, чтобы получить следующий один результат:
|----------------------------------------------------------------|
| ID | Post Title | Meta Key One | Meta Key Two | Meta Key Three |
|----------------------------------------------------------------|
| 1 | Title #1 | value for #1 | value for #1 | value for #1 |
|----------------------------------------------------------------|
| 2 | Title #2 | value for #2 | null | value for #2 |
|----------------------------------------------------------------|
| 3 | Title #3 | value for #3 | null | value for #3 |
|----------------------------------------------------------------|
Но я не знаю, как это сделать.
SQL-запрос у меня есть не строить до сих пор это:
SELECT
`p`.`ID` AS `ID`,
`p`.`Title` AS `Post Title`,
`mt1`.`meta_value` AS `Meta Key One`,
`mt2`.`meta_value` AS `Meta Key One`,
FROM
posts AS `p`
LEFT JOIN `meta` AS `mt1` ON (`p`.`ID` = `mt1`.`post_id`)
LEFT JOIN `meta` AS `mt2` ON (`p`.`ID` = `mt2`.`post_id`)
WHERE
1 = 1
AND `mt1`.`meta_key` = 'key_one'
AND `mt2`.`meta_key` = 'key_three';
Проблема заключается в том, что если добавить третий LEFT JOIN
в meta
таблицу, чтобы использовать его в дальнейшем в WHERE
предложения и сказать mt1.meta_key = 'key_two'
я получаю только один вместо трех.
Кто-нибудь знает, как я могу достичь этого с помощью одного запроса?
Я не знаю, если это помогает, но я создать SQL скрипки здесь: http://sqlfiddle.com/#!9/af591f/1
Обратите внимание, что имена столбцов в скрипке не удовлетворяют те, в моем примере, но проблема остается тем же ,
По общему правилу: критерий по внешней присоединяемой таблице принадлежит в 'ON' пункта не в' WHERE' пункт. Здесь ваш запрос выходит из строя. –