2016-08-30 2 views
-1

Я пытаюсь сделать запрос с несколькими объединениями, и я просто не могу его получить. У меня есть две таблицы custallocns и debtortrans. custallocns имеет два столбца transid_allocfrom amd transid_allocto, которые соединяют таблицу debtortrans столбца debtortrans, id, который я хочу, чтобы результаты были в одном столбце. Код ниже - это то, что я пытаюсь, я прокомментировал второе соединение в коде, поскольку он не будет работать с обоими соединениями. Я также пытался использовать их как псевдоним, похоже, тоже не получается. Тот, у кого есть custallocns.transid_allocfrom, создает задолженность.трансно, которые являются кредитами, и custallocns.transid_allocto производит longortrans.transno, которые являются номерами счетов, которые мне нужно объединить в один столбец.Соедините две таблицы mutliple раз

SELECT 
       `debtortrans`.`transno`, 
       debtortrans.type, 
       custallocns.datealloc, 
       debtortrans.id 
FROM 
       `ts_demo`.`custallocns` `custallocns` 
INNER JOIN `ts_demo`.`debtortrans` `debtortrans` ON (
       `debtortrans`.`id` = `custallocns`.`transid_allocfrom` 

/*INNER JOIN `ts_demo`.`debtortrans` `debtortrans` ON (
       `debtortrans`.`id` = `custallocns`.`transid_allocto` 
)*/ 
) 
WHERE 
       debtortrans.trandate >= LAST_DAY(CURRENT_DATE) + INTERVAL 1 DAY - INTERVAL 1 MONTH 
AND debtortrans.trandate < LAST_DAY(CURRENT_DATE) + INTERVAL 1 DAY 
AND debtortrans.settled = '1' 
AND debtortrans.type BETWEEN '10' 
AND '11' 

Желаемый результат:

transno type allocdate id 
    720 11 8/1/2016 12873 
    721 11 8/1/2016 12876 
    722 11 8/1/2016 12889 
    723 11 8/1/2016 12891 
    7419 10 8/1/2016 12872 
    7421 10 8/1/2016 12875 
    7427 10 8/1/2016 12882 
    7432 10 8/1/2016 12887 
    728 11 8/2/2016 12987 
    729 11 8/2/2016 12989 
    7470 10 8/2/2016 12988 
    7471 10 8/2/2016 12990 
    731 11 8/3/2016 13053 
    7436 10 8/3/2016 12945 
    7437 10 8/3/2016 12946 
    7438 10 8/3/2016 12947 

Спасибо за помощь

+0

В втором 'ВНУТРЕННИЙ JOIN' просто использовать различные псевдонимы для таблицы' 'debtortrans' fé debtortrans2', а затем изменить свои условия 'WHERE'. – Legionar

+0

Вы используете равные псевдонимы, просто измените один из них –

ответ

0

В второй INNER JOIN просто использовать различные псевдонимы для таблицы debtortrans Fe debtortrans2, а затем изменить свои условия в WHERE:

SELECT 
       `debtortrans`.`transno`, 
       debtortrans.type, 
       custallocns.datealloc, 
       debtortrans.id 
FROM 
       `ts_demo`.`custallocns` `custallocns` 
INNER JOIN `ts_demo`.`debtortrans` `debtortrans` ON (
       `debtortrans`.`id` = `custallocns`.`transid_allocfrom`) 

INNER JOIN `ts_demo`.`debtortrans` `debtortrans2` ON (
       `debtortrans`.`id` = `custallocns`.`transid_allocto`) 

WHERE 
debtortrans.trandate >= LAST_DAY(CURRENT_DATE) + INTERVAL 1 DAY - INTERVAL 1 MONTH 
AND debtortrans.trandate < LAST_DAY(CURRENT_DATE) + INTERVAL 1 DAY 
AND debtortrans.settled = '1' 
AND debtortrans.type BETWEEN '10' 
AND '11' 
+0

Пробовал без везения, что мне нужно делать, когда условия? –

+0

Некоторое сообщение об ошибке? Вы должны изменить условия 'WHERE' в соответствии с вашими требованиями. Ваш желаемый результат не имеет смысла, чего именно вы хотите достичь. – Legionar

0

I y НУ хотим присоединиться два столбца вам нужен внутреннее соединение двух раз на одном столе с помощью соответствующего псевдонима

SELECT 
       `debtortrans`.`transno`, 
       debtortrans.type, 
       custallocns.datealloc, 
       debtortrans.id 
FROM `ts_demo`.`custallocns` 
INNER JOIN `ts_demo`.`debtortrans` as a ON a.`id` = custallocns`.`transid_allocfrom` 
INNER JOIN `ts_demo`.`debtortrans` as b ON b.`id` = `custallocns`.`transid_allocto` 

WHERE debtortrans.trandate >= LAST_DAY(CURRENT_DATE) + INTERVAL 1 DAY - INTERVAL 1 MONTH 
AND debtortrans.trandate < LAST_DAY(CURRENT_DATE) + INTERVAL 1 DAY 
AND debtortrans.settled = '1' 
AND debtortrans.type BETWEEN '10' 
AND '11' 
Смежные вопросы