我见过很多人为取款和存款创建了一个独特的表,以及一个用“w”或“d”填写的类别字段来指定任何记录。
因为我需要 W 或 D 的不同字段,所以我决定创建 2 个不同的表,但现在我不知道如何加入它们。
他们有一个共同的字段“时间戳”(注册的时间戳应该是唯一的)
如何在 mysql 中创建单个表,例如:
时间戳---金额宽度取款---金额存款???
我知道左加入或右加入,但我认为双方都需要加入:S
做出一些假设,并断言加入毫秒是荒谬的,在这里摆弄。
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;
模拟全外连接:
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
由于 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。
顺便说一句,单笔交易的存款和取款将是相同的价值,不是吗?