从表到表

时间:2015-06-22 17:46:10

标签: php mysql sql mysqli

我有一个开放式的api feed,每小时为我的数据库提供数据。开放日数据库包含:MLS#,上市代理,上市办公室,地址,开放日期,下一个开放日期。

我想创建一个新表,保存开放日期和下一个开放日期的所有记录。我可以有重复的MLS#,但需要有不同的开放日期。

开放表:当前周

--------------------------------------
MLS    | Open Date | Next Open Date 
12433  | 6/24/15   | 6/25/15           
23223  | 6/22/15   | 6/23/15         
35325  | 6/23/15   | 7/01/15       
--------------------------------------

开放表:上周

--------------------------------------
MLS    | Open Date | Next Open Date 
12433  | 6/15/15   |   n/a     
23223  | 6/18/15   | 6/20/15         
35325  | 6/07/15   |   n/a   
--------------------------------------

所有开放日历史表:

--------------------------------------
MLS    | Open Date | Next Open Date 
12433  | 6/24/15   | 6/25/15           
23223  | 6/22/15   | 6/23/15         
35325  | 6/23/15   | 7/01/15 
12433  | 6/15/15   |   n/a     
23223  | 6/18/15   | 6/20/15         
35325  | 6/07/15   |   n/a         
--------------------------------------

历史记录表可以包含相同的号码,但不能具有相同的开放日期和下一个开放日期。

我试过了:

INSERT INTO open_house_history (mls_id, open_date, next_open_date)
SELECT mls_id, open_date, next_open_date
FROM open_house
WHERE open_date NOT IN (SELECT open_date FROM open_house_history) 
AND mls_id IN (SELECT mls_id FROM open_house_history)

请帮忙! 三江源

1 个答案:

答案 0 :(得分:0)

您的查询存在问题,因为您要排除表格中已有开放日期的所有记录。

WHERE open_date NOT IN (SELECT open_date FROM open_house_history) 

如果您要获得具有相同日期的其他商家信息,则会将其排除在外。具有相同ID但日期不同的列表也将被排除。

在这样的例子中,我将所有字段组合成一个字符串并将其用于比较:

INSERT INTO open_house_history (mls_id, open_date, next_open_date)
SELECT mls_id, open_date, next_open_date
FROM open_house
WHERE CONVERT(VARCHAR(8), open_date, 112) + '|' + mls_id NOT IN (SELECT CONVERT(VARCHAR(8), open_date, 112) + '|' + mls_id FROM open_house_history)