需要用SQL编写稍高级的查询

时间:2014-01-09 15:54:43

标签: mysql sql

所以说这是一张桌子:

------------------------------------
|post_id|meta_tag|meta_value       |
------------------------------------
|1      |address |123 Example Lane |
------------------------------------
|1      |name    |John Doe         |
------------------------------------
|1      |email   |johndoe@gmail.com|
------------------------------------
|3      |foo     |bar              |
------------------------------------

基本上我要做的是,只有post_id中的一个meta_tag值中包含地址时才从meta_value中选择*。然后,我希望能够为每个post_id回显所有{{1}}。

希望这不会太混乱。感谢。

1 个答案:

答案 0 :(得分:3)

获取帖子至少有一个地址标记的所有行:

select *
from t t1
where exists (select 1
              from t t2
              where t2.post_id = t1.post_id and t2.meta_tag = 'address'
             );

如果你想要完全一个,有各种方法。遵循相同的逻辑:

select *
from t t1
where 1 = (select count(*)
           from t t2
           where t2.post_id = t.post_id and t2.meta_tag = 'address'
          );

如果你真的只想要有一个地址标签的* post_id *:

select post_id
from t t1
group by post_id
having sum(t1.meta_tag = 'address') = 1;

(如果您要查找任何> 0代码,请设置address。)