MySQL - сложное левое соединение - PullRequest
0 голосов
/ 22 сентября 2011

У меня здесь отношения один ко многим. Кроме того, не все «первичные» записи будут иметь объединенную запись во второй таблице базы данных.

Вот мои таблицы:

tbl_customers tbl_addresses

У записи клиента в tbl_customers может быть много адресов в таблице tbl_addresses.

Вот моя дилемма. Существует много записей о клиентах с несколькими адресами, и я назначаю одну из этих записей адресов в качестве «основного» адреса для записи клиента. Это просто один column, называемый: primaryAddress. Значение будет номером 1, если эта адресная запись является основным адресом.

Так вот мой запрос:

SELECT c.customername, a.state 
FROM `tbl_customers` c
LEFT JOIN `tbl_addresses` a ON c.customerid = a.customerid

Этот запрос приведет к дублированию записей для любого клиента с более чем 1 адресом. Если я добавлю немного больше в левое соединение:

SELECT c.customername, a.state 
FROM `tbl_customers` c
LEFT JOIN `tbl_addresses` a ON c.customerid = a.customerid AND a.primaryAddress = 1

Это не дает результатов, даже когда я вижу в базе данных много записей адресов с primaryAddress = 1.

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

Может кто-то увидеть, что мне не хватает?

1 Ответ

0 голосов
/ 22 сентября 2011

Любой, кто попадет на эту страницу, ищет решение:

ЭТО НЕ ПРАВИЛЬНО ОТВЕЧАЕТ НА ВОПРОС

Пользователь смог найти причину после обсуждения проблемы здесь. Оказывается, у него была опечатка в его оригинальном коде. Второй блок кода SQL, размещенный в вопросе, является правильным и должен дать ожидаемые результаты . +1 за пользователя JoeStefanelli за указание на это.

Пожалуйста, прочитайте комментарии для деталей. Мой оригинальный ответ ниже. Теперь я вижу, что должен был удалить это, вместо того, чтобы пытаться изменить это, как только я понял, что это было ошибочно. По крайней мере, обсуждение помогло пользователю найти решение ...


Мой оригинальный ответ:

Вы почти там. Вместо этого добавьте a.primaryAddress = 1 к предложению WHERE.

EDIT

Не уверен, если это исключит клиентов с нулевыми адресами из результатов ...

...