SELECT不返回“AND”的值

时间:2011-02-21 17:56:01

标签: mysql sql

我错过了什么吗?我的表包含:

  • country,其值为“usa
  • school-type,其值为“4 Year University

如果我使用第2行,查询将返回'220'。如果我使用第4行,它也会返回'220'。如果我在它们之间同时使用'OR',它会两次返回'220',但是如果我使用'AND',它就不会返回任何内容。有什么想法吗?

SELECT post_id FROM wp_postmeta WHERE
(   (meta_key='school-type' AND meta_value='Community College')
 OR (meta_key='school-type' AND meta_value='4 Year University'))
AND
(   (meta_key='country' AND meta_value='usa')
 OR (meta_key='country' AND meta_value='canada'))

3 个答案:

答案 0 :(得分:1)

问题是,单行不能同时具有“学校类型”和“国家/地区”的meta_key。由于这个原因,将两个不同的搜索结合起来会产生0个结果。

答案 1 :(得分:0)

你的查询错了。 我们举个例子吧 如果meta_key ='school-type' 而不是国家,所以你的第二个条件总是快速返回。

答案 2 :(得分:0)

WHERE会过滤每一行,因此meta_key无法成为学校类型和国家/地区。

尝试HAVING子句:

SELECT post_id
FROM wp_postmeta
WHERE meta_key='school-type' OR meta_key='country'
GROUP BY post_id
HAVING SUM(
    IF(meta_key='school-type',
      meta_value='Community College' OR meta_value='4 Year University',
      meta_value='usa' OR meta_value='canada'
      )) = 2

或者,如果你想获得两行:

SELECT post_id
FROM wp_postmeta
WHERE
((meta_key='school-type' AND meta_value='Community College') OR (meta_key='school-type' AND meta_value='4 Year University'))
OR
((meta_key='country' AND meta_value='usa') OR (meta_key='country' AND meta_value='canada'))