我可以使用子查询来完成where子句吗?

时间:2015-11-03 16:14:50

标签: mysql subquery where-clause unique-index

我有两个由membership .ID和memberDues.memberID连接的表。成员资格表有一列firstBast,每列都是唯一的。如果我有firstLast的值,我应该能够找到membership .ID并将其与memberDues.memberID进行比较。我使用以下查询,但它不起作用:

SELECT * FROM memberDues, membership 
WHERE memberID = 
( SELECT ID FROM membership 
WHERE firstLast = 'Jim Smith') 
ORDER BY payDate DESC 
LIMIT 1

结果从其行中获取正确的memberDues.memberID和其他数据,但从成员资格表中提取不相关的数据集,即使ID错误也是如此。查询出了什么问题?

3 个答案:

答案 0 :(得分:1)

您可以在共享的ID值上加入这两个表,然后您只能选择那些firstLast = 'Jim Smith'的行。我认为您可以使用以下查询更有效地实现您想要的(避免一个额外的选择):

SELECT aa.*, bb.*
FROM memberDues AS aa
INNER JOIN membership AS bb
ON aa.memberID = bb.ID
WHERE bb.firstLast = 'Jim Smith'
ORDER BY aa.payDate DESC
LIMIT 1;

答案 1 :(得分:0)

您应该使用IN而不是等号:

SELECT * FROM memberDues, membership WHERE memberID IN
    (SELECT ID FROM membership WHERE firstLast = 'Jim Smith')
    ORDER BY payDate DESC LIMIT 1

答案 2 :(得分:0)

  

查询有什么问题?

您的查询连接了2个表而没有指定相关条件。

为了快速启动您的问题,我会尝试指定 where子句中的membership.ID = memberDues.memberID

我个人的建议是在ON子句中使用该条件使用LEFT JOIN。但它是更高级的SQL编码,选择取决于此特定应用程序的结构和需求。