我见过很多人为提款和存款创建一个唯一的表格,并且用“w”或“d”填写的类别字段用于指定任何记录。
由于我需要W或D的不同字段,我决定创建2个不同的表,但现在我不知道如何加入它们。
他们有一个公共字段“timestamp”(注册的时间戳应该是唯一的)
如何在mysql中创建单个表,如:
时间戳---数量宽幅提取---金额存款???
我知道左或右连接但我需要双方加入我认为:S
答案 0 :(得分: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
答案 1 :(得分: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。
顺便说一句,单笔交易的存款和取款价值是相同的,不是吗?答案 2 :(得分:1)
做出一些假设,断言加入毫秒是荒谬的,fiddle here。
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;
this,
怎么样?SELECT
Timestamp,
Amount,
NULL
FROM
Withdrawl
UNION ALL
SELECT
Timestamp `time stamp`,
NULL `amount withdrawal`,
Amount `amount deposits`
FROM
Deposit
ORDER BY
Timestamp ASC;