SQL联接仅一行

时间:2018-07-17 14:56:53

标签: mysql sql join

我有2个销售数据表,这些表没有公用密钥,只有销售日期和客户名称。我想加入它们,以便表A中的每一行最多有表B中的1个匹配项,如果找不到则为0。问题是同一客户在同一日期出现两次。所以如果我有这样的数据

Table A                             Table B

Customer | Date       | Receipt     Customer | Date       | Invoice
===============================     ===============================
John     | 2018-01-01 | A           John     | 2018-01-01 | C
John     | 2018-01-01 | B           John     | 2018-01-01 | D

我怎么得到这个

Result

Customer | Date       | Receipt | Invoice
=========================================
John     | 2018-01-01 | A       | C
John     | 2018-01-01 | B       | D

收据A与发票C或D相匹配并不重要,只要它们配对一次即可。目前,我的查询加入了AC,AD,BC,BD等所有

编辑:为澄清起见,我在任何一个表中都不能重复。一张发票和收据只能出现一次。 因此,这些结果之一都可以接受:

  • AC和BD
  • AD和BC

3 个答案:

答案 0 :(得分:1)

这很痛苦,因为您需要枚举两个表,然后进行store或聚合。这是一种方法:

import { createStore, applyMiddleware } from 'redux';
import thunk from 'redux-thunk';
import rootReducer from '../reducers/root-reducer';
import { myMiddleware } from '../middleware/my-middleware';

export default function configureStore(initialState) {

    const store = createStore(
        rootReducer,
        initialState,
        applyMiddleware(thunk, myMiddleware)
    );

    return store;
}

答案 1 :(得分:0)

为什么既然只希望使用不同的记录,那么在加入两个表之后为什么不做不同的记录呢?

asyncio.wait

答案 2 :(得分:0)

我要给出一个您可能不会喜欢的答案:这不应该在SQL中完成。这是一个演示/显示问题。

在向用户显示数据而不是SQL后端的层中执行此类工作。他们在网页上查找吗?然后让网页获取原始数据并根据需要对其进行格式化-将每天的收据或每天的发票的内容放在单独的div中。 SQL是否使用此数据发送电子邮件?然后,不要让它生成纯文本电子邮件-让它生成HTML并将数据放入表格单元格中(这样,您就不必在两组数据之间的行进行协调,而数据量可能会有所不同。)

您真的不想玩试图使SQL输出在SQL内部看起来很漂亮的游戏。因为,老实说,您接受的答案中的代码可能工作正确,但是我不愿意多年来试图对其进行维护...