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中的函数和数据类型名称. (编辑:威海站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |