sql – 将两个表合并为一个新表,以便忽略另一个表中的选择行
|
我有两个具有相同列的表.我想将这两个表一起连接到第三个表中,第三个表包含第一个表中的所有行,而第二个表中的所有行都具有相同位置的第一个表中不存在的日期. 例: 交易方式: date |location_code| product_code | quantity ------------+------------------+--------------+---------- 2013-01-20 | ABC | 123 | -20 2013-01-23 | ABC | 123 | -13.158 2013-02-04 | BCD | 234 | -4.063 transactions2: date |location_code| product_code | quantity ------------+------------------+--------------+---------- 2013-01-20 | BDE | 123 | -30 2013-01-23 | DCF | 123 | -2 2013-02-05 | UXJ | 234 | -6 期望的结果: date |location_code| product_code | quantity ------------+------------------+--------------+---------- 2013-01-20 | ABC | 123 | -20 2013-01-23 | ABC | 123 | -13.158 2013-01-23 | DCF | 123 | -2 2013-02-04 | BCD | 234 | -4.063 2013-02-05 | UXJ | 234 | -6 我怎么会这样呢?我试过这个例子: SELECT date,location_code,product_code,type,quantity,location_type,updated_at,period_start_date,period_end_date
INTO transactions_combined
FROM ( SELECT * FROM transactions_kitchen k
UNION ALL
SELECT *
FROM transactions_admin h
WHERE h.date NOT IN (SELECT k.date FROM k)
) AS t;
但是这并没有考虑到我想要包含具有相同日期但位置不同的行.我正在使用Postgresql 9.2. 解决方法根据您的描述,查询可能如下所示:我使用LEFT JOIN / IS NULL来排除第二个表中相同位置和日期的行. NOT EXISTS将是另一个不错的选择.
UNION根本不做你所描述的. CREATE TABLE AS SELECT date,quantity FROM transactions_kitchen k UNION ALL SELECT h.date,h.location_code,h.product_code,h.quantity FROM transactions_admin h LEFT JOIN transactions_kitchen k USING (location_code,date) WHERE k.location_code IS NULL; 使用CREATE TABLE AS而不是SELECT INTO.
或者,如果目标表已存在: INSERT INTO transactions_combined (<list names of target column here!>) SELECT ... 我建议不要使用日期作为列名.它是每个SQL标准中的reserved word以及PostgreSQL中的函数和数据类型名称. (编辑:均轻资讯网_我爱站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- sql-server – 获得随机排序的最佳方法是什么?
- couchdb – PouchDB:多个远程数据库,单个本地数据库(花式复
- sql-server – SQL表大小和查询性能
- 用户帐户 – 最佳实践 – 删除未使用的SQL帐户或仅禁用它们
- ibm-domino – Domino Admin:如何从Domino控制台或数据库中
- entity-framework-4 – 如何使用SQL Compact 4首先使用Enti
- sql-server – 数据库对象的版本控制
- sql – 当结果集很大时,RODBC会丢失datetime的时间值
- sql – 复制记录以填补日期之间的差距
- 数据库 – mysqldump – where with =运算符不能获取所有行

