有关系的同一列中的多个条件

时间:2012-08-23 05:27:19

标签: sql ruby

情况如下:

有一个用户表

id     email      orders_counter
=================================
1      a@a.com    5
2      b@b.com    3
3      c@c.com    0

用户数据表用于用户的其他数据

id     user_id      title      value
=======================================
1      1            Name       Peter Johnson
2      1            Tel        31546988
3      2            Name       Alan Johnson
4      2            Tel        56984887

如果我想获取

的所有用户
1, orders_counter greater then 3
2, Name contain 'Johnson'
3, Tel contain '88'

同一时间

我的sql是什么,如果我想用rubyonrails方式做的话 什么是ActiveRecord代码 我知道我可以一个接一个地将它们加在一起,但是在条件增加的同时浪费了太多的资源

3 个答案:

答案 0 :(得分:0)

尝试一下,

SELECT   a.*, b.*
FROM     user a
            INNER JOIN data b
                ON a.id = b.user_ID
WHERE   a.orders_counter > 3 AND
        (b.title = 'NAME' AND b.value like '%johnson%') AND
        (b.title = 'TEL' AND b.tel like '%88%')

答案 1 :(得分:0)

试试这个:

select *
from  user U  join user_data D
on    U.id=D.user_id
where U.orders_counter>3
and   D.title='Name' and value like '%Johnson%'
and   D.title='Tel' and value like '%88%'

答案 2 :(得分:0)

Select * From `user` u
inner join `userdata` d on d.user_id=u.id and d.title='Name' and d.value like '%Johnson%'
inner join `userdata` c on c.user_id=u.id and c.title='Tel' and c.value like '%88%'
where orders_counter > 3

您的用户数据表的结构方式,您几乎总是必须多次加入该表,以便将这些值“转移”到列中。我建议只创建一个名称和tel作为列的表。然后查询变得更加简单

select * from `user` u
inner join `user_data` d on d.Tel like '%88%' and d.Name like '%johnson%'
where u.orders_counter > 3