У меня есть три таблицы в моей базе данных (contracts
, partners
и customers
), в которых контракт может использоваться как для клиентов, так и для партнеров.
Я храню данные контракта только в таблице contracts
и таблице customers
, а таблица partners
содержит поле с именем contract_id
, которое является внешним ключом для поля contracts
id.
Нет, я хочу выбрать контракты и показать их в списке, но если контракт использовался для клиента и партнера одновременно, я хочу, чтобы мой список отображал их обоих, но я не могу заставить его работать.
Мой запрос:
SELECT c.*, p.id AS partner_id, p.name AS partner_name,
cu.id AS customer_id, cu.name AS customer_name
FROM contracts AS c
LEFT JOIN partners AS p ON c.id = p.contract_id
LEFT JOIN customers AS cu ON c.id = cu.contract_id
ОБРАЗЦЫ: записи таблицы contract
выглядят следующим образом:
id | title | contract_start | contract_end
-------------------------------------------------------------
1 | Test | 2012-10-02 | 2013-10-02
2 | Test2 | 2012-09-27 | 2013-09-27
Записи таблицы customers
выглядят так:
id | code | name | contract_id
-------------------------------------------------------------
1 | 123456 | Customer1 | 1
2 | 654321 | Dummy Co. LTD. | 2
Записи таблицы partners
выглядят так:
id | code | name | contract_id
-------------------------------------------------------------
1 | 789456 | Partner1 | 1
Нет, я хочу список с 3 записями, каждая из которых показывает контракт (учитывая, что одна из них повторяется), и каждая показывает имя и идентификатор партнера или клиента. Если в договоре участвует клиент, поле партнера должно быть null
и наоборот.
ON c.id = cu.id
. Разве это не должно бытьON c.id = cu.contract_id
? - person dnagirl   schedule 07.12.2012LEFT JOIN
вы никогда не получите больше строк в своем результирующем наборе, чем в левой таблице предложения соединения. Таким образом, вы, вероятно, видите только одну строку из таблицы контрактов, но для этой строки заполнены как partner_{id,name}, так и customer_{id,name}. Это так? - person Justin ᚅᚔᚈᚄᚒᚔ   schedule 07.12.2012partners
, а затем только с присоединенной таблицейcustomers
. Это позволит вам узнать, какая таблица ведет себя неправильно. - person dnagirl   schedule 07.12.2012