Mysql 选择按2个值筛选数据

Mysql 选择按2个值筛选数据,mysql,inner-join,Mysql,Inner Join,从上次到现在已经很久了。。。 这里的问题是: 一个带有用户数据名、电话等的表 具有和id的其他表用户\类型,以及类型为student、worker等的Varchar USER与USER\u TYPE\u USER的关系为1-N。用户类型用户与用户类型的关系为1-N。正如您所猜测的,USER\u TYPE\u USER存储用户id和USER\u TYPE id。一个用户可以是一种或多种类型 这里的问题是,我想从类型为1和2的用户中选择用户数据和用户类型。很抱歉,名字是西班牙语的 SELECT s

从上次到现在已经很久了。。。 这里的问题是: 一个带有用户数据名、电话等的表 具有和id的其他表用户\类型,以及类型为student、worker等的Varchar USER与USER\u TYPE\u USER的关系为1-N。用户类型用户与用户类型的关系为1-N。正如您所猜测的,USER\u TYPE\u USER存储用户id和USER\u TYPE id。一个用户可以是一种或多种类型

这里的问题是,我想从类型为1和2的用户中选择用户数据和用户类型。很抱歉,名字是西班牙语的

 SELECT socio.*, socio_tipo_socio.id_tipo_socio,tipo_socio.tipo 
 FROM ((respeta.socio 
 INNER JOIN respeta.socio_tipo_socio ON socio.dni = respeta.socio_tipo_socio.socio_dni)
 INNER JOIN respeta.tipo_socio ON tipo_socio.id_tipo_socio = socio_tipo_socio.id_tipo_socio)
 WHERE socio_tipo_socio.id_tipo_socio = 1 AND socio_tipo_socio.id_tipo_socio = 2
这不管用。我知道我可以放置或替换和,但这将为我提供仅为类型1或2的用户

有什么想法吗?希望我的数据库教授没有看到我在问XD。谢谢

编辑1。 这是另一种使我要求的查询数据更少的方法,也许它有助于理解我试图实现的目标。我有User1,它是类型1和类型2,还有User2,它是类型2。我只想检索类型为1和类型2的用户,因此,理想的查询只返回User1

 SELECT distinct(socio.dni), socio.nombre
 from socio, socio_tipo_socio, tipo_socio 
 WHERE socio.dni = socio_tipo_socio.socio_dni 
 AND socio_tipo_socio.id_tipo_socio = tipo_socio.id_tipo_socio
 AND tipo_socio.id_tipo_socio  = 2
显然,上面的查询显示了type2用户User1和User2。不知道如何修复它,比如和tipo_social.id_tipo_social=2和tipo_social.id_tipo_social=1,并且只有User1。这就是我被困的地方

编辑2

解决了!!!!是啊

 SELECT *
 FROM socio, tipo_socio, socio_tipo_socio
 WHERE tipo_socio.id_tipo_socio = 1 
 AND socio.dni IN (
  SELECT socio.dni
  FROM socio, socio_tipo_socio, tipo_socio
  WHERE tipo_socio.id_tipo_socio = 2
  AND tipo_socio.id_tipo_socio = socio_tipo_socio.id_tipo_socio
  AND socio.dni = socio_tipo_socio.socio_dni
 )
 AND tipo_socio.id_tipo_socio = socio_tipo_socio.id_tipo_socio
 AND socio.dni = socio_tipo_socio.socio_dni

你在那里所做的符合逻辑。但是,任何一条记录都不能同时具有值1和值2。您应该做的是查找类型为1的记录,查找类型为2的记录并合并它们

类型为1的行

SELECT *
FROM users utu types
WHERE typeid = 1 AND <table connectors>

第一个表查找类型为1的人员。第二个表查找类型为2的人员。参见第三个查询中的th,它意味着查找类型为1和类型为2的人员。这就像数组搜索。

我明白了。所以你有一个N-N关系和一个表来覆盖N-N关系。3张桌子。您只需要拥有type1和type2的用户。对的解决方案是否允许嵌套查询:嗨,谢谢你的回答,但我不明白。我应该构建3个查询还是只构建最后一个查询?如果你能多写一点你的答案,我将非常感激。我编辑了它从表1中可以看出,表2与join是相同的。它只是更可靠。同样的事情也发生了,谢谢你的时间,非常感谢。我正在尝试,但MySql一直在和上启动错误。。。部分好像是错误的语法或类似的东西。呵呵,没问题,但我仍然认为userid介于和之间。我再次编辑我的问题
SELECT *
FROM users utu types
WHERE typeid = 2 AND <table connectors>
SELECT *
FROM users
WHERE typeid = 1 AND IN (
    SELECT *
    FROM users utu types
    WHERE typeid = 2
    ) AND <table connectors>
SELECT *
FROM users
WHERE typeid = 1 
  AND IN userid (
          SELECT userid
          FROM users utu types
          WHERE typeid = 2
         )
  AND tipo_socio.id_tipo_socio = socio_tipo_socio.id_tipo_socio
  AND socio.dni = socio_tipo_socio.socio_dni