在连接时返回不存在的行

时间:2013-10-23 17:10:23

标签: sql transactions

我有一个交易表,其中包含交易日期,交易总额和信用卡ID。我将此交易表加入具有信用卡ID和信用卡类型的卡片类型表 - 此表仅包含4行信用卡类型的Visa,Master Card,Discover和American Express。

我想查看每个日期和地点的所有交易日期,总计和信用卡类型,但即使没有使用特定信用卡类型进行任何交易,我还想要为所有日期和信用卡类型返回一行(即使没有使用Visa信用卡进行交易,我希望在9月1日返回4行。

右连接无效,因为所有4种信用卡类型都在不同日期使用。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

您需要使用一个子查询来返回所有交易日期和信用卡类型的交叉产品,然后将LEFT JOIN与事务联系起来:

SELECT c.txn_date txn_date, card_type, SUM(txn_total) daily_total
FROM (SELECT card_id, card_type, txn_date
      FROM cardtype
      JOIN (SELECT DISTINCT txn_date FROM transaction) t) c
LEFT JOIN transaction t
ON t.card_id = c.card_id AND t.txn_date = c.txn_date
GROUP BY c.card_id, txn_date
ORDER BY txn_date, card_type

SQLFIDDLE