MySQL加入表并获取一个不存在的结果

时间:2012-03-28 14:33:34

标签: php mysql database

我有两个表,一个有另一个外键。我希望根据特定条件获取外表中不存在的所有记录。

以下是我的表格:

item_setting

  • setting_id
  • CATEGORY_ID

项目

  • ITEM_ID
  • setting_id
  • 名称
  • expired_dt

这是我现在使用的查询:

SELECT 
    iset.setting_id
FROM
    item_settings iset
LEFT OUTER JOIN
    item i ON i.setting_id = iset.setting_id
WHERE
    iset.category_id = '5' AND i.setting_id is null

此查询适用于提供在特定类别的项目表中没有记录的任何setting_id。

但是,现在我想要包含expired_dt小于time()(意味着它已过期)的情况。换句话说,我想补充一点:

WHERE
    iset.category_id = '5' AND (i.setting_id is null OR i.expired_dt < '".time()."')

但是,这不起作用,它会返回所有记录。

有什么建议吗?也许我完全过分复杂了....我只想从item_settings表中返回setting_id,其中item表中关联的expired_dt已过期,或者它甚至不存在于item表中。

谢谢!

1 个答案:

答案 0 :(得分:1)

尝试将时间戳条件移动到join子句中。像

这样的东西
item_settings iset
LEFT OUTER JOIN
    item i ON i.setting_id = iset.setting_id and i.expired_dt > time()