构建多个MySql查询条件

问题描述:

我必须构建一些复杂的mysql查询。我有一个包含一些用户信息的表格,包含3列:id,id_user,id_campo,valore。例如:构建多个MySql查询条件

  • 1,1,1,“Roberto”(其中id_campo = 1用于用户名);
  • 2,2,1,“Luca”;
  • 3,1,2,“Windows”; (其中id_campo = 2用于所使用的OS);
  • 4,2,2,“Linux”; 等。

现在,我有选择的用户其中:name = “罗伯托” 和OS =的 “Linux”,但同样的用户:

SELECT id_user WHERE (id_campo=1 AND valore="Roberto") OR (id_campo=2 AND valore="Linux"). 

在此示例情况下,查询返回id_user = 1和id_user = 2,但我不会得到任何结果。如何修改查询,以便可以包含“同一用户”的条件?

谢谢!

+2

你知道数据库建设是错的,就在同一个表内连接?这不是关系数据库/表应该如何工作的方式。对于不同的数据,您不使用多列关系使用相同的列。为什么你不能获取匹配'id_user'的行? – junkfoodjunkie

+1

为什么'FROM'操作符错过? – RomanPerekhrest

+0

为什么错了?我有一个用户表,一个“campo”表和一个“user_spec”表。因此,用户可以拥有“campo”(“Name”,“OS”,“email”,)中包含的不同user_spec值(“Roberto”,“Luca”,“Windows”,“Linux” ..)。如果它是错误的,我怎样才能修改数据库结构的最佳方式?谢谢 – cent89

您需要构建两个“子查询”,然后通过用户ID加入它们。

SELECT a.id_user 
from (
    SELECT id_user FROM table 
    WHERE (id_campo=1 AND valore="Roberto") 
) a, 
(
    SELECT id_user FROM table 
    WHERE (id_campo=2 AND valore="Linux") 
) b 
WHERE a.is_user = b.id_user 

你有一个错误的数据库设计,但无论如何你可以usie基于id_user

select a.id_user, a.id_campo, a.valore 
    from my_table as a 
    inner join my_table as b on .id_user = b-id_user 
    where (a.id_campo = 1 and a.valore ='Roberto') 
    AND (b.id_campo = 2 and b.valore ='Linux')