1
SELECT
`wp_emu_theme_contact_page`.`firstName`
, `wp_emu_theme_contact_page`.`city`
, `wp_emu_theme_contact_page`.`state`
, `wp_posts`.`post_content`
, `wp_posts`.`post_date`
, `wp_posts`.`post_type`
, `wp_posts`.`ID`
, `wp_emu_theme_testimonials`.`permission`
, `wp_emu_theme_testimonials`.`userID`
, `wp_users`.`user_login`
, `wp_usermeta`.`meta_value`
FROM
 `wp_emu_theme_testimonials`
INNER JOIN  `wp_emu_theme_contact_page` 
    ON (`wp_emu_theme_testimonials`.`contactID` = `wp_emu_theme_contact_page`.`dbID`)
INNER JOIN  `wp_posts` 
    ON (`wp_emu_theme_testimonials`.`postID` = `wp_posts`.`ID`)
LEFT JOIN  `wp_users` 
    ON (`wp_emu_theme_testimonials`.`userID` = `wp_users`.`ID`)
INNER JOIN  `wp_usermeta` 
    ON (`wp_usermeta`.`user_id` = `wp_users`.`ID`)
WHERE (`wp_posts`.`post_type` ='testimonial'
AND `wp_usermeta`.`meta_key` ='facebook_uid')
OR (`wp_usermeta`.`meta_key` = 'null');

问题是该表wp_usermeta可能没有 meta_key = 'facebook_uid'。在这种情况下,我没有收到这些条目。我想得到所有其他的东西,即使那meta_key不存在user_id。如果确实如此,那就太好了。如果我取出有关该表的部分,此查询将按预期工作。我试过没有 OR。我正在使用mysql。

4

4 回答 4

3

听起来您想使用LEFT JOIN并制作以下​​条件部分ON

LEFT JOIN  `wp_usermeta` 
    ON (`wp_usermeta`.`user_id` = `wp_users`.`ID`
        AND `wp_usermeta`.`meta_key` ='facebook_uid')
于 2012-08-09T05:26:31.493 回答
1

您需要使用LEFT JOIN而不是INNER JOIN.

于 2012-08-09T05:24:12.523 回答
0
SELECT
`wp_emu_theme_contact_page`.`firstName`
,`wp_emu_theme_contact_page`.`city`
, `wp_emu_theme_contact_page`.`state`
, `wp_posts`.`post_content`
, `wp_posts`.`post_date`
, `wp_posts`.`post_type`
, `wp_posts`.`ID`
, `wp_emu_theme_testimonials`.`permission`
, `wp_emu_theme_testimonials`.`userID`
, `wp_users`.`user_login`
, `wp_usermeta`.`meta_value`
FROM
`wp_emu_theme_testimonials`
INNER JOIN  `wp_emu_theme_contact_page` 
ON (`wp_emu_theme_testimonials`.`contactID` = `wp_emu_theme_contact_page`.`dbID`)
INNER JOIN  `wp_posts` 
ON (`wp_emu_theme_testimonials`.`postID` = `wp_posts`.`ID`)
LEFT JOIN  `wp_users` 
ON (`wp_emu_theme_testimonials`.`userID` = `wp_users`.`ID`)
LEFT JOIN  `wp_usermeta` 
ON (`wp_users`.`ID` = `wp_usermeta`.`user_id`)
WHERE (`wp_posts`.`post_type` ='testimonial'
AND `wp_usermeta`.`meta_key` ='facebook_uid')
OR (`wp_usermeta`.`meta_key` IS NULL);

在这种情况下使用左连接而不是内连接。

于 2012-08-09T05:38:40.303 回答
0

我使用的是 T-SQL(MS SQL Server),而不是 MySQL,所以我对我所说的话持保留态度。

我不确定您是否正确检查 null:

OR (`wp_usermeta`.`meta_key` = 'null'); 

你可以这样检查NULL吗?在 SQL Server 中需要使用 IS NULL 来检查,而这篇文章(http://www.tutorialspoint.com/mysql/mysql-null-values.htm)好像说在 MySQL 中也是一样的。如果你改变 or 说类似的东西

OR (`wp_usermeta`.`meta_key` IS NULL);

你可能会得到你想要的。另外,我不确定括号在 MySQL 中是如何工作的,但我会这样做:

WHERE `wp_posts`.`post_type` ='testimonial'          
AND (`wp_usermeta`.`meta_key` ='facebook_uid' OR `wp_usermeta`.`meta_key` IS NULL);

现在,说了这么多,您仍然应该考虑将其作为表的左连接,正如其他人所建议的那样。与使用 or 相比,它可能会为您提供更好的性能。

于 2012-08-09T05:52:01.920 回答