sql查询问题

时间:2010-08-06 20:36:42

标签: sql mysql

我正在使用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;今天那是唯一将被退回的条目,而我希望其他(已过期的)也会被退回。我有实际的查询和所有连接工作正常,我只是无法弄清楚它的**部分。

任何帮助都会很棒!

谢谢!

2 个答案:

答案 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子句中使用它。