mysql - можно ли присоединиться к более чем одному полю? - PullRequest
4 голосов
/ 02 февраля 2011

Я пытаюсь написать оператор соединения, но обнаружил, что выполняемый запрос выдает одинаковую информацию для каждого найденного заголовка.Кажется, мне нужно объединить таблицы на нескольких полях, и я не уверен, что это возможно?Это немного сложно объяснить, но приведенный ниже код показывает, что я пытаюсь выполнить и что на самом деле происходит ... Надеюсь, кто-нибудь сможет указать мне правильное направление?

+----------------------------------------------------+
TABLE: NODE N
+----------------------------------------------------+
nid   | vid   | type  | language | title      | uid
22196 | 22196 | einfo | en       | Contact 15 |  15
22040 | 22040 | fmp   | en       | John Doe   |  15
22043 | 22043 | fmp   | en       | Jane Doe   |  15

+----------------------------------------------------+
TABLE: CONTENT_FIELD_PN P
+----------------------------------------------------+
vid   | nid   | delta | field_name_nid 
22196 | 22196 |     0 |          22040 
22196 | 22196 |     1 |          22043 


+----------------------------------------------------+
TABLE: CONTENT_FIELD_PP PP
+----------------------------------------------------+
vid   | nid   | delta | field_homephone_value
22196 | 22196 |     0 | 6505551212
22196 | 22196 |     1 | 6505551444

Iя пытаюсь написать оператор соединения, который выдаст:

+----------------------------------------------------+
TRYING TO OUTPUT
+----------------------------------------------------+
title       | field_homephone_value | delta
John Doe    | 6505551212            | 0
Jane Doe    | 6505551444            | 1

+----------------------------------------------------+

ЧТО В ТЕКУЩЕМ ВЫХОДЕ

+----------------------------------------------------+
title       | field_homephone_value | delta
John Doe    | 6505551212            | 0
Jane Doe    | 6505551212            | 1

+----------------------------------------------------+
THE QUERY AS IT'S CURRENTLY WRITTEN
+----------------------------------------------------+

SELECT p.field_name_nid, n2.title, p.delta, pp.field_homephone_value
FROM node n 
LEFT JOIN content_field_pn p ON n.nid = p.nid 
LEFT JOIN node n2 ON p.field_name_nid = n2.nid 
LEFT JOIN content_field_pp pp ON p.nid = pp.nid 
WHERE n.nid = 22196 
GROUP BY p.delta

Ответы [ 2 ]

15 голосов
/ 02 февраля 2011

Вы можете использовать and в предложении on:

LEFT JOIN content_field_pp pp ON p.nid = pp.nid AND p.vid = pp.vid
                                                ^^^^^^^^^^^^^^^^^^
3 голосов
/ 02 февраля 2011

Вы можете присоединиться к нескольким полям ...

SELECT `blah` FROM `a` LEFT JOIN `b` ON `b`.`id` = `a`.`id` AND `b`.`field2` = `a`.`field2`
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...