MySQL如何从一个表中加入并选择可见记录?

时间:2011-01-08 14:45:33

标签: mysql

我正在尝试通过添加新字段来修复某些数据。

我有几个月前的备份,我已将此数据库恢复到我的服务器。

我正在查看名为pad的表,其主键是PadID,重要字段称为RemoveMeDate。在我的已恢复(较旧)数据库中,在RemoveMeDate中设置实际日期的记录较少。我的控制日期是2001-01-01 00:00:00,这意味着该记录未隐藏,也称为可见。

我需要做的是从控制日期中选择旧数据库/表中的所有记录,并与未设置控制日期的较新数据库/表中的记录连接。

我希望我已经正确解释过了。

我会再试一次,有数字。我在旧表(设置了控制日期)中有80,000个可见记录,在较新的db / table中有30,000个可见记录。我需要从旧数据库中选择50,000,以执行更新查询。

继承我的查询,我无法按照自己的意愿去工作。 jules-fix-reasons是旧的数据库,jules是较新的数据库。

select p.padid 
from `jules-fix-reasons`.`pads` p
JOIN `jules`.`pads` ON p.padid = `jules`.`pads`.`PadID` 
where p.RemoveMeDate <> '2001-01-01 00:00:00' AND 
`jules`.`pads`.RemoveMeDate =     '2001-01-01 00:00:00'

编辑 - 也许我可以提供一个例子,而不是10,000个记录,我将展示一个例子。

p.pads (old table)
PadID=1 RemoveMeDate=2010-12-01 09:00:00
PadID=2 RemoveMeDate=2001-01-01 00:00:00
PadID=3 RemoveMeDate=2001-01-01 00:00:00
PadID=4 RemoveMeDate=2001-01-01 00:00:00
PadID=5 RemoveMeDate=2001-01-01 00:00:00
PadID=6 RemoveMeDate=2001-01-01 00:00:00
PadID=7 RemoveMeDate=2001-01-01 00:00:00
PadID=8 RemoveMeDate=2001-01-01 00:00:00
PadID=9 RemoveMeDate=2001-01-01 00:00:00
PadID=10 RemoveMeDate=2009-01-05 00:10:00

所以theres 8(aks =真实表中的80,000)记录可见。

Jules.pads
PadID=1 RemoveMeDate=2010-12-01 09:00:00
PadID=2 RemoveMeDate=2010-12-01 08:00:00
PadID=3 RemoveMeDate=2010-12-01 07:00:00
PadID=4 RemoveMeDate=2010-12-01 06:00:00
PadID=5 RemoveMeDate=2001-01-01 00:00:00
PadID=6 RemoveMeDate=2001-01-01 00:00:00
PadID=7 RemoveMeDate=2001-01-01 00:00:00
PadID=8 RemoveMeDate=2001-01-01 00:00:00
PadID=9 RemoveMeDate=2001-01-01 00:00:00
PadID=10 RemoveMeDate=2009-01-05 00:10:00

所以theres 5(aks =真实表中的50,000)记录可见。

所以我想要的SQL查询将返回表P中的记录2,3,4

编辑ajreal - 工作查询(FYI)

SELECT old_table.padid
FROM `jules-fix-reasons`.`pads` AS old_table
JOIN `jules`.`pads` AS new_table ON old_table.padid = new_table.`PadID`
WHERE new_table.RemoveMeDate <> '2001-01-01 00:00:00'
AND old_table.RemoveMeDate = '2001-01-01 00:00:00'

1 个答案:

答案 0 :(得分:1)

  

我需要做的是从旧数据库/表中选择控制日期的所有记录,并选择加入来自未设置控制日期的较新数据库/表中的记录

你只需要翻转条件

select old_table.padId, new_table.padId
from `jules-fix-reasons`.`pads` as old_table
JOIN `jules`.`pads` as new_table
ON old_table.padid = `jules`.`pads`.`PadID`
where new_table.RemoveMeDate<>'2001-01-01 00:00:00' AND 
old_table.RemoveMeDate='2001-01-01 00:00:00'

PS:是时候学习如何为你的表别名命名