我可以使用子查询来完成 where 子句吗?
Can I use a subquery to complete a where clause?
我有 2 个 table 由 membership.ID 和 memberDues.memberID 连接。成员资格 table 有一列 firstLast,它对于每一行都是唯一的。如果我有 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 和它行中的其他数据,但从成员 table 中提取了一个不相关的数据集,甚至 ID 都是错误的。查询有什么问题?
您应该使用 IN
而不是等号:
SELECT * FROM memberDues, membership WHERE memberID IN
(SELECT ID FROM membership WHERE firstLast = 'Jim Smith')
ORDER BY payDate DESC LIMIT 1
您可以根据共享的 ID
值连接两个表,然后您可以 select 仅那些具有 firstLast = 'Jim Smith'
的行。我认为您可以使用以下查询更有效地实现您想要的(避免一个额外的 select):
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;
What's wrong with the query?
您的查询联接了 2 个表,但未指定关联它们的条件。
为了快速开始您的问题,我会尝试指定
membership.ID = memberDues.memberID
在 where 子句中。
我个人的建议是在 ON 子句中使用该条件使用 LEFT JOIN。但它是更高级的 SQL 编码,选择取决于该特定应用程序的结构和需求。
我有 2 个 table 由 membership.ID 和 memberDues.memberID 连接。成员资格 table 有一列 firstLast,它对于每一行都是唯一的。如果我有 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 和它行中的其他数据,但从成员 table 中提取了一个不相关的数据集,甚至 ID 都是错误的。查询有什么问题?
您应该使用 IN
而不是等号:
SELECT * FROM memberDues, membership WHERE memberID IN
(SELECT ID FROM membership WHERE firstLast = 'Jim Smith')
ORDER BY payDate DESC LIMIT 1
您可以根据共享的 ID
值连接两个表,然后您可以 select 仅那些具有 firstLast = 'Jim Smith'
的行。我认为您可以使用以下查询更有效地实现您想要的(避免一个额外的 select):
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;
What's wrong with the query?
您的查询联接了 2 个表,但未指定关联它们的条件。
为了快速开始您的问题,我会尝试指定
membership.ID = memberDues.memberID
在 where 子句中。
我个人的建议是在 ON 子句中使用该条件使用 LEFT JOIN。但它是更高级的 SQL 编码,选择取决于该特定应用程序的结构和需求。