有什么更好的方法来查找表 Y 中与表 X 的 PK 相关的所有 ID 是否都存在于 mysql 的表 Z 中?



我有一个3个表X、Y、Z。

表Y中的条目有一个列Y.x_id,其中包含作为FK.的x.id

表Z中的条目有两列Z.x_id、Z.y_id用于x.id和y.id。

X和Y具有一对多映射。

Y和Z具有一对一映射。

所以X和Z也有一对多映射。

如果对于给定的X.id,Y中的所有相关条目也存在于表Z中,那么最好的查找方法是什么。如果Y中与X.id相关的所有条目也在Z中,则我需要根据X.id更新X中的列。

现在我正在写两个问题。

内部联接b/w Y&X:

select Y.id 
from Y
join X 
on X.id = Y.x_id 
where X.id= ?;

内部联接b/w Y&X&Z:

select Y.id 
from Y 
join X 
on X.id = Y.x_id
join Z 
on (Z.x_id = X.id AND Z.y_id = Y.id) 
where X.id = ?;

然后匹配计数,这两个查询的值(Java端(。

在mysql中有更好的方法吗?我有非常基本的sql知识,无法在网上找到好的线索。

谢谢你的帮助。

EXISTS子句应该可以完成这个任务。

SELECT Y.id
FROM Y, X
WHERE X.id = Y.x_id
AND X.id = ?
AND EXISTS (SELECT 1
FROM Z
WHERE Z.x_id = X.id
AND Z.y_id = Y.id)

如果您想知道表Z中是否有与X和Y中的行匹配的行,可以向SELECT子句添加count(*)。这将返回具有匹配行数的1行。然后,您可以检查代码中是否存在row_count > 0

SELECT count(*) row_count
FROM Y, X
WHERE X.id = Y.x_id
AND X.id = 2
AND EXISTS (SELECT 1
FROM Z
WHERE Z.x_id = X.id
AND Z.y_id = Y.id)

相关内容

  • 没有找到相关文章