Mysql 我可以使用子查询来完成where子句吗?
我有两个由membership.ID和memberDues.memberID连接的表。成员资格表有一列firstLast,它对于每一行都是唯一的。如果我有firstLast的值,那么我应该能够找到membership.ID并将其与memberDues.memberID进行比较。我正在使用以下查询,但它不起作用:Mysql 我可以使用子查询来完成where子句吗?,mysql,subquery,where-clause,unique-index,Mysql,Subquery,Where Clause,Unique Index,我有两个由membership.ID和memberDues.memberID连接的表。成员资格表有一列firstLast,它对于每一行都是唯一的。如果我有firstLast的值,那么我应该能够找到membership.ID并将其与memberDues.memberID进行比较。我正在使用以下查询,但它不起作用: SELECT * FROM memberDues, membership WHERE memberID = ( SELECT ID FROM membership WHERE fi
SELECT * FROM memberDues, membership
WHERE memberID =
( SELECT ID FROM membership
WHERE firstLast = 'Jim Smith')
ORDER BY payDate DESC
LIMIT 1
结果从其行中获取正确的memberDues.memberID和其他数据,但从成员资格表中提取一个不相关的数据集,即使ID是错误的。查询有什么问题?您应该在中使用
,而不是等号:
SELECT * FROM memberDues, membership WHERE memberID IN
(SELECT ID FROM membership WHERE firstLast = 'Jim Smith')
ORDER BY payDate DESC LIMIT 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;
这个问题怎么了
您的查询联接两个表,而不指定与它们相关的条件
为了快速回答你的问题,我会尽量详细说明
where子句中的membership.ID=memberDues.memberID
我个人的建议是在ON子句中使用这个条件使用左连接。但它是更高级的SQL编码,选择取决于此特定应用程序的结构和需求。您正在进行笛卡尔积。。。交叉连接。。。m行和n行在结果集中生成m*n行。然后你会说,嘿,从allalso的排列中给我一行,select*with JOIN倾向于提供一些不受欢迎的列。对于快速查询很好,但是在生产中清理一下谢谢Kostas,这是一个优雅的解决方案,很有意义。它也有用!伟大的我很高兴我帮助了你。