Mysql 选择按2个值筛选数据
从上次到现在已经很久了。。。 这里的问题是: 一个带有用户数据名、电话等的表 具有和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的用户中选择用户数据和用户类型。很抱歉,名字是西班牙语的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
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