我正在使用MySQL而我正在尝试构建一个查询来执行以下操作:
我有:
Table1 [ID,...]
Table2 [ID, tID, start_date, end_date,...]
我想从查询中得到的是:
Select all entires from Table2 Where Table1.ID=Table2.tID
**where at least one** end_date<today.
我现在的工作方式是,如果表2包含(例如)5个条目,但只有1个条目是end_date&lt;今天那是唯一将被退回的条目,而我希望其他(已过期的)也会被退回。我有实际的查询和所有连接工作正常,我只是无法弄清楚它的**部分。
任何帮助都会很棒!
谢谢!
答案 0 :(得分:3)
SELECT * FROM Table2
WHERE tID IN
(SELECT Table2.tID FROM Table1
INNER JOIN Table2 ON Table1.ID = Table2.tID
WHERE Table2.end_date < NOW
)
子查询将选择与where子句匹配的所有tId。主查询将使用此子查询来过滤表2中的条目。
注意:使用内连接将过滤表1中的所有行,而表2中没有匹配的条目。这没有问题;无论如何,这些条目都不会匹配where子句。
答案 1 :(得分:0)
也许,只是也许,你可以创建一个子查询来加入你的实际表,在这个子查询中你使用count(),稍后你可以在where子句中使用它。