1

我见过很多人为取款和存款创建了一个独特的表,以及一个用“w”或“d”填写的类别字段来指定任何记录。

因为我需要 W 或 D 的不同字段,所以我决定创建 2 个不同的表,但现在我不知道如何加入它们。

他们有一个共同的字段“时间戳”(注册的时间戳应该是唯一的)

如何在 mysql 中创建单个表,例如:

时间戳---金额宽度取款---金额存款???

我知道左加入或右加入,但我认为双方都需要加入:S

4

3 回答 3

1

做出一些假设,并断言加入毫秒是荒谬的,在这里摆弄

CREATE TABLE Withdrawl
(
    Timestamp TIMESTAMP PRIMARY KEY,
    Amount Decimal(60, 4)
);

CREATE TABLE Deposit
(
    Timestamp TIMESTAMP PRIMARY KEY,
    Amount Decimal(60, 4)
);

SELECT
        Timestamp,
        -Amount
    FROM
        Withdrawl
UNION ALL
SELECT
        Timestamp,
        Amount
    FROM
        Deposit
    ORDER BY
        Timestamp ASC;

这个怎么样

SELECT
        Timestamp,
        Amount,
        NULL
    FROM
        Withdrawl
UNION ALL
SELECT
        Timestamp `time stamp`,
        NULL `amount withdrawal`,
        Amount `amount deposits`
    FROM
        Deposit
    ORDER BY
        Timestamp ASC;
于 2013-09-17T08:39:13.107 回答
1

模拟全外连接:

SELECT t1.timestamp, t1.value as withdrawals, t2.value as deposits FROM t1
LEFT JOIN t2 ON t1.timestamp = t2.timestamp
UNION
SELECT t1.timestamp, t1.value as withdrawals, t2.value as deposit FROM t1
RIGHT JOIN t2 ON t1.timestamp = t2.timestamp 

没有加入:

select timestamp, sum(withdrawal) as withdrawal, sum(deposit) as deposit 
from 
(
select timestamp, withdrawal,0 as deposit from withdrawal
union all
select timestamp, 0 as withdrawal, deposit from deposit
) group by timestamp
于 2013-09-17T08:12:42.663 回答
1

由于 MySQL 不支持 FULL OUTER JOIN,为什么不为取款和存款保留一个表?

当您需要两列时,它只是一个

SELECT
   ts_col,
   MIN(CASE WHEN TransactionIndicator = 'D' THEN amount END) AS Deposits,
   MIN(CASE WHEN TransactionIndicator = 'W' THEN amount END) AS withDrawal
FROM tab
GROUP BY ts_col

如果您不需要在一行中同时取款和存款,则不需要 MIN/GROUP BY。

顺便说一句,单笔交易的存款和取款将是相同的价值,不是吗?

于 2013-09-17T08:29:45.833 回答