我有3个表。一个用于用户,一个用于帖子,另一个用于连接另外两个表的连接表。MySQL的JOIN - 复杂Select语句
下面是连接表的一些样本数据。
| id | user_id | post_id | timestamp |
|----|---------|---------|-----------|
| 1 | 1 | 1 | 4-17-2012 |
| 2 | 1 | 2 | 4-16-2012 |
| 4 | 2 | 2 | 4-17-2012 |
| 5 | 3 | 1 | 4-16-2012 |
|____|_________|_________|___________|
我想写一个SELECT查询,将做到以下几点:
1)选择一个用户的所有职位与2012年4月17日
和
时间戳2)如果该用户的连接表中没有帖子条目,请选择这些帖子。
所以...... 对于USER_ID = 1,后期1会被选中,但没有发布2,因为后2不是2012年4月17日 对于USER_ID = 2,这两个职位会被选中,后因1有对USER_ID = 2和POST_ID = 1的条目,并张贴2,因为它是2012年4月17日 对于USER_ID = 3,1后不予退还,但后2会是这样,因为没有为USER_ID没有条目= 3,POST_ID = 2
这里是什么,我一直想一个例子:
SELECT * FROM职位为p LEFT JOIN posts_users为濮上(p.post_id = pu.post_id) WHERE((pu.user_id = $ USER_ID和pu.timestamp = 2012年4月17日)OR(pu.post_id IS NULL)
如果有一个POST_ID = 3行中的职位,那就有NULL所有posts_users列,因为LEFT JOIN,这有助于满足#2。但是如果有任何人使用post_id = 3的posts_users条目,那么将不会有NULL。 MySQL中有没有办法让我们可以拥有#2的逻辑?
我做的这一切都在一个已经在PHP写出来的框架,并在某种程度上这将使它很难让我必须处理使用PHP来过滤返回的结果。请相信我。有没有办法对我来说,使用一个SQL语句来做到这一点,还是我去尝试,并在PHP中的解决方法后,我得到一些其他查询的结果?
谢谢。
帖子展望进一步,它看起来像我可以使用NOT EXISTS?我从来没有使用过这个,我怎么会在这种情况下使用它?再次感谢。 – MattDiamant 2012-04-17 21:54:53