Sql 访问并比较三个表
是否有办法三次检查三个表之间的数据是否一致,并显示三个表中是否存在任何差异 每个表并不完全相同,但它们都有一个Sql 访问并比较三个表,sql,ms-access,Sql,Ms Access,是否有办法三次检查三个表之间的数据是否一致,并显示三个表中是否存在任何差异 每个表并不完全相同,但它们都有一个EmployeeID、amount、datepaid和CID列 当我处理两个表时,我认为SQL是: SELECT tbMaster.EmployeeID, tbMaster.Amount, tbMaster.DatePaid, tbMaster.CID FROM tbMaster LEFT JOIN tbCID ON (tbMaster.CID = tbCID.CID) AND (tbM
EmployeeID
、amount
、datepaid
和CID
列
当我处理两个表时,我认为SQL是:
SELECT tbMaster.EmployeeID, tbMaster.Amount, tbMaster.DatePaid, tbMaster.CID
FROM tbMaster LEFT JOIN tbCID ON (tbMaster.CID = tbCID.CID) AND (tbMaster.Amount = tbCID.Amount) AND (tbMaster.DatePaid = tbCID.DatePaid)
WHERE (((tbMaster.[Advance/paid])="Paid Respondent") AND ((tbCID.CID) Is Null));
它起作用了,但如果tbCID
有任何差异,它就无法捕捉到
所以对于这三张桌子,我想:
SELECT tbMaster.EmployeeID, tbMaster.Amount, tbMaster.DatePaid, tbMaster.[Advance/paid], tbMaster.CID
FROM tbMaster, tbCID, table3
WHERE tbMaster.CID <> tbCID.CID
OR table3.CID <> tbMaster.CID
OR table3.CID <> tbCID.CID
OR tbMaster.Amount <> tbCID.Amount
OR table3.AMOUNT <> tbMaster.AMOUNT
OR table3.AMOUNT <> tbCID.AMOUNT
OR tbMaster.Datepaid <> tbCID.Datepaid
OR table3.DATEPAID <> tbMaster.DATEPAID
OR table3.DATEPAID <> tbCID.DATEPAID
选择tbMaster.EmployeeID、tbMaster.Amount、tbMaster.DatePaid、tbMaster.[Advance/paid],tbMaster.CID
来自tbMaster,tbCID,表3
其中tbMaster.CID tbCID.CID
或表3.CID tbMaster.CID
或表3.CID tbCID.CID
或tbMaster.金额tbCID.金额
或表3.AMOUNT.Tmaster.AMOUNT
或表3.金额待定。金额
或tbMaster.已付款tbCID.已付款
或表3.DatePayed tbMaster.DatePayed
或表3.DatePayed tbCID.DatePayed
但是只有30个条目,但我得到了5倍或6倍的副本,并且在查询中得到了30000多行/条目…您正在对三个表进行完全交叉连接,因此,对于tbMaster行、tbCID行和table3行的每一个组合,如果这三个行在三列上不匹配,将返回一行 如果您试图返回一个tbMaster行,其中CID、Amount和DatePayed未同时出现在tbSUID和table3中,则需要类似于第一次查询的内容:
SELECT tbMaster.EmployeeID, tbMaster.Amount, tbMaster.DatePaid, tbMaster.CID
FROM tbMaster
LEFT JOIN tbSUID ON (tbMaster.CID = tbSUID.CID) AND (tbMaster.Amount = tbSUID.Amount) AND (tbMaster.DatePaid = tbSUID.DatePaid)
LEFT JOIN table3 ON (tbMaster.CID = table3.CID) AND (tbMaster.Amount = table3.Amount) AND (tbMaster.DatePaid = table3.DatePaid)
WHERE ((tbMaster.[Advance/paid])="Paid Respondent")
AND ((tbCID.CID) Is Null) OR (table3.CID Is Null));
如果记录必须仅出现在tbSUID和表3中的一个中,则将最后一个“或”替换为“和”。您正在对三个表进行完全交叉联接,因此对于tbMaster行、tbCID行和表3行的每一个组合,如果三个行在三列上不匹配,则将返回一行 如果您试图返回一个tbMaster行,其中CID、Amount和DatePayed未同时出现在tbSUID和table3中,则需要类似于第一次查询的内容:
SELECT tbMaster.EmployeeID, tbMaster.Amount, tbMaster.DatePaid, tbMaster.CID
FROM tbMaster
LEFT JOIN tbSUID ON (tbMaster.CID = tbSUID.CID) AND (tbMaster.Amount = tbSUID.Amount) AND (tbMaster.DatePaid = tbSUID.DatePaid)
LEFT JOIN table3 ON (tbMaster.CID = table3.CID) AND (tbMaster.Amount = table3.Amount) AND (tbMaster.DatePaid = table3.DatePaid)
WHERE ((tbMaster.[Advance/paid])="Paid Respondent")
AND ((tbCID.CID) Is Null) OR (table3.CID Is Null));
如果记录必须仅出现在tbSUID和表3中的一个中,则将最后一个“或”替换为“和”。考虑
不存在
子句中的子查询:
SELECT m.EmployeeID, m.Amount, m.DatePaid, m.[Advance/paid], m.CID
FROM tbMaster m
WHERE NOT EXISTS
(SELECT 1 FROM tbCID c
WHERE c.CID = m.CID OR c.AMOUNT = m.AMOUNT OR c.DATEPAID = m.DATEPAID)
OR NOT EXISTS
(SELECT 1 FROM table3 t
WHERE t.CID = m.CID OR t.AMOUNT = m.AMOUNT OR t.DATEPAID = m.DATEPAID)
为反向比较,考虑添加SoeCixLoad指示符的联合查询:
SELECT m.EmployeeID, m.Amount, m.DatePaid, m.[Advance/paid], m.CID,
'tbMaster' AS [source_table]
FROM tbMaster m
WHERE NOT EXISTS
(SELECT 1 FROM tbCID c
WHERE c.CID = m.CID OR c.AMOUNT = m.AMOUNT OR c.DATEPAID = m.DATEPAID)
OR NOT EXISTS
(SELECT 1 FROM table3 t
WHERE t.CID = m.CID OR t.AMOUNT = m.AMOUNT OR t.DATEPAID = m.DATEPAID)
UNION ALL
SELECT c.EmployeeID, c.Amount, c.DatePaid, c.[Advance/paid], c.CID,
'tbCID' AS [source_table]
FROM tbCID c
WHERE NOT EXISTS
(SELECT 1 FROM tbMaster m
WHERE m.CID = c.CID OR m.AMOUNT = c.AMOUNT OR m.DATEPAID = c.DATEPAID)
OR NOT EXISTS
(SELECT 1 FROM table3 t
WHERE t.CID = c.CID OR t.AMOUNT = c.AMOUNT OR t.DATEPAID = c.DATEPAID)
UNION ALL
SELECT t.EmployeeID, t.Amount, t.DatePaid, t.[Advance/paid], t.CID,
'table3' AS [source_table]
FROM table3 t
WHERE NOT EXISTS
(SELECT 1 FROM tbMaster m
WHERE m.CID = t.CID OR m.AMOUNT = t.AMOUNT OR m.DATEPAID = t.DATEPAID)
OR NOT EXISTS
(SELECT 1 FROM tbCID c
WHERE c.CID = t.CID OR c.AMOUNT = t.AMOUNT OR c.DATEPAID = t.DATEPAID)
考虑
不存在
子句中的子查询:
SELECT m.EmployeeID, m.Amount, m.DatePaid, m.[Advance/paid], m.CID
FROM tbMaster m
WHERE NOT EXISTS
(SELECT 1 FROM tbCID c
WHERE c.CID = m.CID OR c.AMOUNT = m.AMOUNT OR c.DATEPAID = m.DATEPAID)
OR NOT EXISTS
(SELECT 1 FROM table3 t
WHERE t.CID = m.CID OR t.AMOUNT = m.AMOUNT OR t.DATEPAID = m.DATEPAID)
为反向比较,考虑添加SoeCixLoad指示符的联合查询:
SELECT m.EmployeeID, m.Amount, m.DatePaid, m.[Advance/paid], m.CID,
'tbMaster' AS [source_table]
FROM tbMaster m
WHERE NOT EXISTS
(SELECT 1 FROM tbCID c
WHERE c.CID = m.CID OR c.AMOUNT = m.AMOUNT OR c.DATEPAID = m.DATEPAID)
OR NOT EXISTS
(SELECT 1 FROM table3 t
WHERE t.CID = m.CID OR t.AMOUNT = m.AMOUNT OR t.DATEPAID = m.DATEPAID)
UNION ALL
SELECT c.EmployeeID, c.Amount, c.DatePaid, c.[Advance/paid], c.CID,
'tbCID' AS [source_table]
FROM tbCID c
WHERE NOT EXISTS
(SELECT 1 FROM tbMaster m
WHERE m.CID = c.CID OR m.AMOUNT = c.AMOUNT OR m.DATEPAID = c.DATEPAID)
OR NOT EXISTS
(SELECT 1 FROM table3 t
WHERE t.CID = c.CID OR t.AMOUNT = c.AMOUNT OR t.DATEPAID = c.DATEPAID)
UNION ALL
SELECT t.EmployeeID, t.Amount, t.DatePaid, t.[Advance/paid], t.CID,
'table3' AS [source_table]
FROM table3 t
WHERE NOT EXISTS
(SELECT 1 FROM tbMaster m
WHERE m.CID = t.CID OR m.AMOUNT = t.AMOUNT OR m.DATEPAID = t.DATEPAID)
OR NOT EXISTS
(SELECT 1 FROM tbCID c
WHERE c.CID = t.CID OR c.AMOUNT = t.AMOUNT OR c.DATEPAID = t.DATEPAID)
请提供样本数据和预期结果。不清楚你想做什么。另外,如果您感兴趣的列在一个表中存在重复项,请说明如何处理这些重复项。对不起,您的问题不清楚。你能添加一些屏幕截图并澄清你的问题吗?对不起,戈登和易卜拉希莫扎贡,我将得到3张表格,试图对数据进行三重检查,以确保他们在同一日期对同一个人拥有相同的金额。如果没有,他们希望只显示不同的。请提供样本数据和预期结果。不清楚你想做什么。另外,如果您感兴趣的列在一个表中存在重复项,请说明如何处理这些重复项。对不起,您的问题不清楚。你能添加一些屏幕截图并澄清你的问题吗?对不起,戈登和易卜拉希莫扎贡,我将得到3张表格,试图对数据进行三重检查,以确保他们在同一日期对同一个人拥有相同的金额。如果他们不喜欢,他们希望那些不同的只显示。唐,谢谢!我明白了<代码>选择tbMaster.EmployeeID、tbMaster.Amount、tbMaster.DatePaid、tbMaster.[预付款/已付款]、tbMaster.CID FROM(tbMaster LEFT-JOIN-tbCID ON(tbMaster.DatePaid=tbCID.DatePaid)和(tbMaster.Amount=tbCID.Amount)和(tbMaster.CID=tbCID=tbCID.CID))左联表3和(tbMaster.DatePaid=table3.DatePaid)和(tbMaster.Amount=表3.Amount),其中(((tbMaster.[预付款/已付款]=“已付答辩人”)和((tbCID.CID)为空)或((tbMaster.[预付款/已付款]=“已付答辩人”)和((表3.CID)为空))谢谢!MS Access SQL需要在多个
JOIN
子句周围加括号,如OP所示。我意识到,此查询只会告诉主表中是否存在表CID或表3中不存在但不存在相反的付费响应者记录,也不会对照表3检查表CID…Don,谢谢!我知道了e> 选择tbMaster.EmployeeID、tbMaster.Amount、tbMaster.DatePaid、tbMaster.[预付款/已付款],tbMaster.CID从(tbMaster左键加入tbCID ON(tbMaster.DatePaid=tbCID.DatePaid)和(tbMaster.Amount=tbCID.Amount)左键加入(tbMaster.CID=table3.CID)和(tbMaster.DatePaid=table3.DatePaid)和(tbMaster.Amount=表3.Amount),其中(((tbMaster.[预付款/已付款]=“已付答辩人”)和((tbCID.CID)为空)或((tbMaster.[预付款/已付款]=“已付答辩人”)和((表3.CID)为空))谢谢!MS Access SQL需要在多个JOIN
子句周围加括号,如OP所示。我意识到,此查询只会告诉主表中是否存在表CID或表3中不存在但不存在相反的付费响应者记录,也不会对照表3检查表CID……谢谢您,这同样有效上面的一个!我可以问一下是否有办法查看t.CID=c.CID…是否也可以?我尝试添加反向,但它不起作用添加用于反向比较的联合查询。请参阅编辑。谢谢您,这与上面的一个一样有效!我可以问一下是否有办法查看t.CID=c.CID…是否也可以?我尝试添加反向,但它不起作用添加联合查询有关反向比较的详细信息,请参见编辑。