我有两个由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错误也是如此。查询出了什么问题?
答案 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编码,选择取决于此特定应用程序的结构和需求。