2014-09-20 2 views
0

Я хочу выполнить левое соединение на таблицах wordpress wp_posts и wp_postmeta.Почему мое левое соединение выполняет как внутреннее соединение

Начиная с простым выбором из wp_posts таблицы

select ID from wp_posts 

это выход:

'1' 
'2' 
'14' 
'15' 
'16' 
'17' 
... 

Он должен делать слева от меня присоединиться к Query

select a.ID from wp_posts a 
left JOIN wp_postmeta b on b.post_id = a.ID 

Это выход:

'1' 
'1' 
'1' 
'2' 
'2' 
'2' 
'14' 
'14' 
'14' 
... 

, который является неправильным, мое левое соединение не действует, как левое соединение здесь.

В чем может быть проблема с моим простым левым соединением?

+1

LEFT JOIN * IS * ВНЕШНЯЯ ВСТУПЛЕНИЕ !! Ключевое слово OUTER необязательно!?!?! – Strawberry

+1

Если вам нравится, подумайте о следующем простом двухэтапном курсе действий: 1. Если вы еще этого не сделали, укажите надлежащие DDL (и/или sqlfiddle), чтобы мы могли легче реплицировать проблему. 2. Если вы еще этого не сделали, укажите желаемый результирующий набор, соответствующий информации, представленной на шаге 1. – Strawberry

+0

Я предполагаю, что в post_met есть 3 записи с post_id 1 – Gervs

ответ

0

Он работает как следует. Я не могу придумать причину, по которой LEFT JOIN никогда не будет возвращать меньше строк, чем в противном случае INNER JOIN; Вероятно, самым простым способом проиллюстрировать это добавление полей из wp_postmeta в поля SELECTed и просмотр результатов. Теперь, если вы хотите, чтобы все значения идентификатора от wp_posts, вы могли бы сделать:

SELECT DISTINCT a.ID 
FROM wp_posts a 
LEFT JOIN wp_postmeta b ON b.post_id = a.ID 
; 

Но это не будет делать много смысла, почему вы не просто использовать свой оригинальный (не соединяющий) запрос.

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