SELECT数据过滤2个值

时间:2014-08-18 15:57:27

标签: mysql inner-join

自上次以来很长时间...... 这里的问题是: 一个表(USER)用户数据(姓名,电话等) 具有和id的其他表(USER_TYPE)和具有类型的Varchar(学生,工人等) USER与USER_TYPE_USER的关系为1-N。 USER_TYPE_USER与USER_TYPE的关系为1-N。您可以猜到,USER_TYPE_USER存储用户的ID和user_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

这不起作用。我知道我可以放置OR代替AND,但这会给我只有1或2类型的用户。

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

编辑1。 这是进行查询的另一种方式(我要求更少的数据),也许这有助于理解我正在努力实现的目标。我有类型1和2的User1,以及类型2的User2。我只想检索Type1和Type2的用户,因此,理想的查询将只返回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)。不知道如何修复它说“AND tipo_socio.id_tipo_socio = 2 AND AND tipo_socio.id_tipo_socio = 1”并且只有User1。那就是我被困住的地方。

编辑2

解决!!!! YEYYY !!!

 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 个答案:

答案 0 :(得分:0)

你在那里所做的逻辑上是正确的。但是,单个记录中没有一个可以同时具有值​​1和值2。你应该做的是找到type1的记录,找到type2的记录并合并它们。

type1

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

type2

的行
SELECT *
FROM users utu types
WHERE typeid = 2 AND <table connectors>

只有在类型2中的类型为<1>的行

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

第一个表创建了type1.second的人是findind type2。在第3个查询中看到IN意味着找到type1和IN2的人。就像数组搜索一样。

相关问题