首页 > 解决方案 > SQL Join 两个表都为 WHERE 子句提供参数

问题描述

以下 SQL 查询是否有效?

SELECT domains.domainURL, passwords.* FROM domains LEFT JOIN passwords ON domains.id = passwords.domainId WHERE domains.domainURL = {1} AND passwords.userId = {2};

SQL 查询应接收用户为特定域(PW 管理器)保存的密码。因此我有用户 ID 和 domainURL。我需要使用 domainURL 从另一个表中接收域 ID。然后我需要从密码表中接收密码,其中用户 ID 和 domainId 作为参数。

标签: javasql

解决方案


这个查询会“工作”吗?

SELECT d.domainURL, p.*
FROM domains d LEFT JOIN
     passwords p
     ON d.id = p.domainId
WHERE d.domainURL = {1} AND p.userId = {2};

好吧,它不应该导致错误——假设表和列是正确的。它做你想做的事吗?好吧,如果你想要一个INNER JOIN,它会做你想做的事。

我怀疑你可能打算:

SELECT d.domainURL, p.*
FROM domains d LEFT JOIN
     passwords p
     ON d.id = p.domainId AND p.userId = {2} 
WHERE d.domainURL = {1};

passwords 如果它存在,这将返回该行。它将返回domains匹配WHERE子句的所有行。


推荐阅读