MySQL 如何从一张表中联接并选择可见记录?

标签 mysql

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

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

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

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

我希望我的解释是正确的。

我会用数字再试一次。我在旧表(设置了控制日期)中有 80,000 条可见记录,在新数据库/表中有 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 条记录,我将显示 1 个示例。

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

因此有 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

因此有 5 条记录(实际表中 aks=50,000)可见。

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

编辑 ajreal - 工作查询(仅供引用)

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'

最佳答案

What I need to do is select all the records from the older database / table with the control date and join with those from the newer db /table where the control date is not set.

你只需要翻转条件

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:是时候学习如何为表别名起一个好名字了

关于MySQL 如何从一张表中联接并选择可见记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4634389/

相关文章:

c# - 传递我的逗号分隔字符串不会在 SQL 中生成结果

php - 组、积分总和、组

java - 在Where子句中插入字符串变量

mysql - 将 mySQL 表中的列值替换为第二个表中的值

mysql - 根据 desc 列值将 id 分配给不同的组

Python mysql 错误

mysql - 将数组传递给 MySQL 存储例程

php - 从 php MySQL 查询输出分号分隔的行

php - 如何获取第一个数组元素(它本身就是数组)?

php - 运行迁移时的“No such file or directory”或“No such host is known”