在多表MySQL数据库中查找缺少的行

时间:2011-09-29 14:56:19

标签: mysql sql database join

我刚刚开始研究其他人放在一起的MySQL数据库,我正在尝试清理它。我的问题有三个相关表格 - 一个列出拍卖的表格,一个列出每次拍卖中出售的拍品的表格以及一个列出每个拍卖品的付款时间表的表格。

拍卖表使用主键来识别每次拍卖,每个拍品都有此密钥以通过拍卖识别它。同样,每个批次都有一个不同的密钥,每个付款用于识别批次。每次拍卖应至少有一个拍卖品,每个拍品至少应有一次付款。不应该在批次表中没有一行的批次上附加任何付款,并且在拍卖表中没有一行的拍卖中不应附加批次。我正在尝试找出一个允许我查找违反此规则的行的查询 - 例如,在批次表中丢失批次或者没有大量附加的额外付款。

目前我正在进行计数明确的查询,它给出了相关表格中提到的批次/拍卖数量,但如果数字不匹配则不能帮我找到哪些缺失。是否有可用于查找缺失行的查询?

由于

2 个答案:

答案 0 :(得分:2)

您可以检查相关表格中的密钥。

Select a.* from Auction a
Left Join Lot l on l.key = a.key
where l.key is null

select * from Auction a
where a.key not in (select key from lot)
这些东西会对你有所帮助。您需要更改表和列名称以匹配,然后为其他适当的情况编写一些脚本,但逻辑应该是相似的。希望这有帮助。

答案 1 :(得分:0)

类似的东西,

SELECT lot.pk来自lot  WHERE lot.fk NOT IN(SELECT DISTINCT(auction.pk)FROM auction)

会为您提供非现场拍卖所附的拍品,并根据您的其他情况进行修改。