MYSQL左外部联接查询未返回所有结果
下面的查询没有为MYSQL左外部联接查询未返回所有结果,mysql,sql,Mysql,Sql,下面的查询没有为name1返回任何值,因为它没有wp\u postmeta.meta\u key='wpcf phone'。我使用的是LEFT-OUTER-JOIN认为它将返回name1的结果,因为它在wp_posts中有值,但它只返回name2的值,而wp_postETA.meta_键='wpcf phone' SELECT wp_posts.ID, wp_posts.post_content, wp_posts.post_title, wp_postmeta.meta_va
name1
返回任何值,因为它没有wp\u postmeta.meta\u key='wpcf phone'
。我使用的是LEFT-OUTER-JOIN
认为它将返回name1
的结果,因为它在wp_posts
中有值,但它只返回name2
的值,而wp_postETA.meta_键='wpcf phone'
SELECT
wp_posts.ID,
wp_posts.post_content,
wp_posts.post_title,
wp_postmeta.meta_value AS phone
FROM
wp_posts
LEFT OUTER JOIN wp_postmeta wp_postmeta ON (wp_posts.ID = wp_postmeta.post_id)
WHERE
wp_posts.post_type = 'solicitors' AND
wp_posts.post_status = 'publish' AND
wp_postmeta.meta_key = 'wpcf-phone' AND
(wp_posts.post_title LIKE '%name1%' OR
wp_posts.post_title LIKE '%name2%')
当
外部联接
“连接失败”时,它会用NULL
值填充输出中的字段。因此,您可以使用或IS NULL
来测试此条件。因此WHERE子句应该类似于:
WHERE
wp_posts.post_type = 'solicitors' AND
wp_posts.post_status = 'publish' AND
(wp_postmeta.meta_key = 'wpcf-phone' OR
wp_postmeta.meta_key IS NULL) AND
(wp_posts.post_title LIKE '%name1%' OR
wp_posts.post_title LIKE '%name2%')
当
外部联接
“连接失败”时,它会用NULL
值填充输出中的字段。因此,您可以使用或IS NULL
来测试此条件。因此WHERE子句应该类似于:
WHERE
wp_posts.post_type = 'solicitors' AND
wp_posts.post_status = 'publish' AND
(wp_postmeta.meta_key = 'wpcf-phone' OR
wp_postmeta.meta_key IS NULL) AND
(wp_posts.post_title LIKE '%name1%' OR
wp_posts.post_title LIKE '%name2%')
您正在引用此行where子句中的外部表:
wp_postmeta.meta_key = 'wpcf-phone'
从而消除了wp\u postETA.meta\u键
为空的所有行,有效地将左连接
转化为内部连接
(因为null='wpcf phone'
为假)
您应该将条件移动到联接:
SELECT
wp_posts.ID,
wp_posts.post_content,
wp_posts.post_title,
wp_postmeta.meta_value AS phone
FROM
wp_posts
LEFT OUTER JOIN wp_postmeta wp_postmeta
ON (wp_posts.ID = wp_postmeta.post_id)
AND wp_postmeta.meta_key = 'wpcf-phone'
WHERE
wp_posts.post_type = 'solicitors' AND
wp_posts.post_status = 'publish' AND
(wp_posts.post_title LIKE '%name1%' OR
wp_posts.post_title LIKE '%name2%')
您正在引用此行where子句中的外部表:
wp_postmeta.meta_key = 'wpcf-phone'
从而消除了wp\u postETA.meta\u键
为空的所有行,有效地将左连接
转化为内部连接
(因为null='wpcf phone'
为假)
您应该将条件移动到联接:
SELECT
wp_posts.ID,
wp_posts.post_content,
wp_posts.post_title,
wp_postmeta.meta_value AS phone
FROM
wp_posts
LEFT OUTER JOIN wp_postmeta wp_postmeta
ON (wp_posts.ID = wp_postmeta.post_id)
AND wp_postmeta.meta_key = 'wpcf-phone'
WHERE
wp_posts.post_type = 'solicitors' AND
wp_posts.post_status = 'publish' AND
(wp_posts.post_title LIKE '%name1%' OR
wp_posts.post_title LIKE '%name2%')
如果你没有必要,为什么要把on从句和where从句混在一起?如果你没有必要,为什么要把on从句和where从句混在一起