多次加入两个表?

时间:2016-08-30 14:30:24

标签: mysql

我正在尝试使用多个连接进行查询,而我似乎无法得到它。 我有两张表custallocns和债务。 custallocns有两列transid_allocfrom amd transid_allocto,它连接表债务运算列债务运算,id,我想把结果放到一列。 下面的代码是我正在尝试的,我已经注释掉代码中的第二个连接,因为它不适用于两个连接。 我也尝试使用它们,因为别名似乎也无法得到它。 带有custallocns.transid_allocfrom的那个产生债券,它们是信用债务,而custallocns.transid_allocto产生债务运输。转移,这是我需要合并成一列的发票号码。

 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

2 个答案:

答案 0 :(得分:0)

在第二个INNER JOIN中,只需对表debtortrans f.e 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'

答案 1 :(得分:0)

我想要加入两个列,你需要使用适当的别名

在同一个表上进行两次内连接
SELECT * FROM listings ORDER BY length(value) DESC, value DESC