gpt4 book ai didi

mysql - 按 2 个值过滤 SELECT 数据

转载 作者:行者123 更新时间:2023-11-29 23:55:48 26 4
gpt4 key购买 nike

距离上次已经好久了...这里的问题是:一张包含(USER)用户数据(姓名、电话等)的表其他表(USER_TYPE)有 id 和一个具有类型(学生、 worker 等)的 VarcharUSER 与 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。我只想检索类型 1 和类型 2 的用户,因此,理想的查询将仅返回用户 1。

 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

显然,上面的查询显示类型 2 用户(User1 和 User2)。不知道如何修复它,说“AND tipo_socio.id_tipo_socio = 2 AND AND tito_socio.id_tipo_socio = 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。您应该做的是查找 type1 的记录,查找 type2 的记录并将它们合并。

类型为 1 的行

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

类型2的行

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

只有类型 1 的行也属于类型 2

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

第一个表找到类型1的人。第二个表找到类型2的人。在第三个查询中看到 th IN 这意味着找到类型 1 和类型 2 的人。这就像数组搜索。

关于mysql - 按 2 个值过滤 SELECT 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25367383/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com