2013-04-15 25 views
0

我可以在数据库中搜索一个元素,其中PreparedStatement对于其中一个参数的值是从我通常作为单独语句创建的变量中找到的?复杂的MySQL命令出现问题。我可以做出这样的复合陈述吗?

所以我想要做的

preparedStatement = conn.prepareStatement("SELECT COUNT(*) FROM table1 WHERE Name = ? AND WHERE user_ID = ?); 
preparedStatement.setString(1, name); 
preparedStatement.setString(2, userID);  
rs = preparedStatement.executeQuery(); 

除了因为它代表我需要一个单独的语句来查找其他表中的用户ID变量。 喜欢的东西:

preparedStatement = conn.prepareStatement("SELECT user_id FROM users WHERE name = ?); 
preparedStatement.setString(1, theirName); 

那么,有没有对这些复合成两个语句的方法吗?即:类似...

"SELECT COUNT(*) FROM table1 WHERE Name = (user_ID FROM users WHERE username = theirName); 

编辑:这可能会更清楚。想象一下,我有一张汽车牌桌,每辆汽车都有一个名字和一个Owner_ID。 而且我有一个用户表,其中每个用户都有一个名称,密码和ID。 每辆车的车主ID都是用户ID之一。

所以我真的想(在单个语句)是所有与名称X的车,他们的主人ID =从用户Y的

回答

2

ID这是通过连接表一起完成的计数:

SELECT COUNT(*) FROM 
    table1 t1 
    JOIN table2 t2 ON t2.name = t1.name 
WHERE t1.name = "John" AND t2.user_ID = 2342433 
+0

这可能是什么我要找的,但它是任何或多或少效率比做一个单独的查询像 喜欢把自己的第二个变量(这我需要在合并报表)“ SELECT id FROM users where USERNAME = theirName“ –

+1

它更高效,因为编译器有机会优化您的呼叫。在单独查询的情况下,它可以独立保存两个输出,这肯定是较慢的。 – sashkello

+0

啊,谢谢。事实证明,无论是加入还是内部加入都是我需要的。 –