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。
答案 0 :(得分:3)
听起来你想使用LEFT JOIN
并使ON
的条件部分成为:
LEFT JOIN `wp_usermeta`
ON (`wp_usermeta`.`user_id` = `wp_users`.`ID`
AND `wp_usermeta`.`meta_key` ='facebook_uid')
答案 1 :(得分:1)
您需要使用LEFT JOIN
代替INNER JOIN
。
答案 2 :(得分: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);
在这种情况下使用左连接而不是内连接。
答案 3 :(得分: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 (`wp_usermeta`.`meta_key` IS NULL);
你可能得到你想要的东西。另外,我不确定parens如何在MySQL中运行,但我会这样做:
WHERE `wp_posts`.`post_type` ='testimonial'
AND (`wp_usermeta`.`meta_key` ='facebook_uid' OR `wp_usermeta`.`meta_key` IS NULL);
现在,已经说过所有这些,你仍然应该考虑让它成为桌面的左连接,正如其他人所建议的那样。它可能会比使用或任何方式给你更好的性能。