I have two tables, one that has a foreign key from the other. I want to get all records that don’t exist in the foreign table, based on certain criteria.
Here are the tables I have:
item_setting
- setting_id
- category_id
item
- item_id
- setting_id
- name
- expired_dt
Here’s the query I’m using now:
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
This query works in providing any setting_id’s that do not have a record in the item’s table within a specific category.
However, now I want to include cases where the expired_dt less than than time() (meaning it’s past expired). In otherwords, I would think to add this:
WHERE
iset.category_id = '5' AND (i.setting_id is null OR i.expired_dt < '".time()."')
However, this doesn’t work, it returns all the records.
Any suggestions? Maybe I’m completely over complicating this…. I just want to return the setting_id’s from the item_settings table, where the expired_dt associated in the item table is expired or if it does not even exist in the item table.
Thank you!
Try moving the timestamp condition into the join clause. Something like