自上次以来很长时间...... 这里的问题是: 一个表(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
答案 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的人。就像数组搜索一样。