选择不同表中没有特定值的所有行

时间:2011-01-07 16:44:43

标签: mysql sql wordpress

这是一个wordpress安装,但我认为问题更多的是一般的SQL问题。首先,我的sql技能不是很好(我甚至不知道我是否遵循正确的格式来说明数据库)。

我有两张桌子:

wp_posts :

    ID (pk)  |   post_name  |  ...
----------------------------
    45       |    "Hello"
    91       |    "Funny"
    16       |    "Wheat"

wp_postmeta :

    post_id (fk)  |    meta_key      |   meta_value  | ...
------------------------------------------------
    45            |    "_edit_lock"  |   5789789834
    45            |    "fizzbizz"    |   "foobar"
    91            |    "_something"  |   "teve"

我想选择wp_posts中wp_postmeta中没有对应行的所有行,其中meta_key =“fizzbizz”

我最初有这个查询,但有人指出在上述情况下它不会检索ID = '16'。我如何正确编写查询?

$pageposts = $wpdb->get_results("
    SELECT * FROM wp_posts p 
    JOIN wp_postmeta m 
    ON p.ID = m.post_id 
    WHERE m.meta_key <> 'fizzbizz' 
    ORDER BY p.post_date DESC;
");

2 个答案:

答案 0 :(得分:3)

使用当前查询并进行以下更改:

LEFT JOIN代替JOIN

添加

OR m.metakey IS NULL到您的WHERE条款:

SELECT * FROM wp_posts p 
    LEFT JOIN wp_postmeta m 
    ON p.ID = m.post_id 
    WHERE m.meta_key <> 'fizzbizz'
       OR m.metakey IS NULL
    ORDER BY p.post_date DESC;

答案 1 :(得分:3)

SELECT * FROM wp_posts p 
LEFT JOIN wp_postmeta m 
ON p.ID = m.post_id 
WHERE m.meta_key <> 'fizzbizz'
OR m.metakey IS NULL
ORDER BY p.post_date DESC;

应该做的伎俩; - )