2013-04-15 1 views
0

У меня есть две таблицы, один для клиентов кредитных (платежи), это выглядит следующим образом:Присоединение 2 колонки, чтобы создать запрос счет потока

id  client  date    amount 
1  ana  2012-01-01  5000 
2  ana  2012 02-01  10000 
3  ana  2012-03-01  5000 

и т.д ..

и другую таблицу для дебета (водозабор), который выглядит следующим образом:

id client  date    amount 
1  ana  2012-01-15  5000 
2  ana  2012 02-15  8000 
3  ana  2012-03-15  9000 

и т.д ...

я хотел бы, чтобы создать запрос, Заказы все операции для каждого клиента по дате, сочетающие 2 даты столбцов в один то, заказывающие по дате, он должен выглядеть следующим образом:

date   payment  withdrawal 
2012-01-01  5000   ---- 
2012-01-15  -----   5000 
2012-02-01  10000   ---- 
2012-02-15  -----   8000 
2012-03-01  5000   ---- 
2012-03-15  -----   9000 

это то, что я пытался, но я знаю его не так, и он дал дублирующие записи:

SELECT payments.amount, payments.date withdrawals.amount, withdrawals.date 
FROM payments,withdrawals 
WHERE payments.client = withdrawals.client 
ORDER BY date 

я попытался LEFT JOIN, но он дал тот же результат:

SELECT payments.amount, payments.date, withdrawals.amount, withdrawals.date 
FROM payments 
LEFT JOIN withdrawals 
ON payments.client= withdrawals.client 
ORDER BY date 

Пожалуйста, помогите и спасибо

+0

Используете ли вы клиент как внешний ключ? Что, если ana ошибся ее имя и изменила ее позже на Annabel? Попытайтесь использовать неменяемые типы, такие как ID для такого рода отношений. –

ответ

2

Вам нужно сделать два простых запросов на выборку, по одному на каждый стол отдельно, а затем объединить результаты, используя ключевое слово UNION, что-то вроде этого:

SELECT date, amount AS payment, NULL AS withdrawal FROM payments WHERE client = 'ana' 
UNION ALL 
SELECT date, NULL AS payment, amount AS withdrawal FROM withdrawals WHERE client = 'ana' 
ORDER BY date 

Вы не хотите делать какие-либо соединения, поскольку данные каждой строки вытягивается из о ни один стол, а не другой.

+0

Это сработало отлично :) Большое спасибо. –

-1

Что вы ищете является FULL OUTER JOIN:

SELECT payments.amount, payments.date, withdrawals.amount, withdrawals.date 
FROM payments FULL OUTER JOIN withdrawals 
    ON payments.client= withdrawals.client 
Order by date 

Или с UNION (по мере необходимости по MySQL):

SELECT payments.amount, payments.date, withdrawals.amount, withdrawals.date 
FROM payments LEFT OUTER JOIN withdrawals 
    ON payments.client= withdrawals.client 
Order by date 
UNION 
SELECT payments.amount, payments.date, withdrawals.amount, withdrawals.date 
FROM payments RIGHT OUTER JOIN withdrawals 
    ON payments.client= withdrawals.client 
Order by date 
+0

, который только что вернул ошибку ..ok позволяет увидеть, не im ли это, что неправильно .. –

+0

Это зависит от типа базы данных, которую вы используете, для mysql вы должны использовать UNION, так как он не делает FULL OUTER JOIN – Borniet

+0

im делая это через PHP следующим образом: $ query = mysql_query («SELECT ...»); while ($ person = mysql_fetch_array ($ query)) {echo $ person ['client']; echo $ person ['date']; echo $ person ['amount']; echo "
";} –

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