我的MySQL
查询中有多个过滤器。它将根据某些过滤器从用户检索信息。
过滤器由用户选择,因此可以按多个值过滤。所有这些都是唯一的,除了一个过滤器,它可以在子查询中返回多行。
用户可以过滤的内容:
考虑到Name
在这种情况下是唯一的,但可以有多个具有相同国籍的用户。此外,如果没有任何过滤器,则查询应返回所有用户的所有UserInfo
。
此外,我面临的问题是信息存储在两个不同的表中。这是结构:
UserInformation Users
---------------- ----------
ID ID
Name UserInfo
Nationality
所以我必须得到与相应过滤器匹配的用户UserInfo
。如果我按Name
进行过滤,我没有任何问题,因为它只能是唯一的,但如果我使用Nationality
作为过滤器,则会出错。
两个表都通过ID连接。
我现在所做的是:
SELECT UserInfo FROM Users WHERE
ID LIKE (SELECT ID FROM UserInformation WHERE Name='UniqueName') AND
ID LIKE (SELECT ID FROM UserInformation WHERE Nationality='Spanish')
当然,如果我尝试按Nationality
进行过滤,如果有多个值与Nationality
匹配,我会发现存在问题,因为他们无法进行过滤了多个返回ID
。
我必须注意到我无法修改表的结构,因为我没有足够的权限,我可以查阅它们。
但是,如何检索与一个,两个或两个过滤器匹配的所有用户的UserInfo
(在这种情况下,它将返回所有UserInfo
值)?
提前致谢!
答案 0 :(得分:1)
加入表格:
SELECT UserInfo FROM Users
JOIN UserInformation ON Users.ID = UserInformation.ID
WHERE Name='UniqueName'
AND Nationality='Spanish'
答案 1 :(得分:0)
试试这个解决方案
SELECT UserInfo FROM Users WHERE
ID IN ((SELECT ID FROM UserInformation WHERE Name='UniqueName') OR
(SELECT ID FROM UserInformation WHERE Nationality='Spanish') OR
(SELECT ID FROM UserInformation WHERE Nationality='Spanish' AND Name='UniqueName'))
答案 2 :(得分:0)
您可以创建一个包含两个表中相关列的视图。这将帮助您在一个地方查找记录。
CREATE OR REPLACE FORCE VIEW "[Your_Schema]"."USERDETAILS" ("ID", "NAME", "NATIONALITY", "USERINFO") AS
SELECT T1.ID,
T1.NAME,
T1.NATIONALITY,
T2.USERINFO,
FROM USERINFORMATION T1, USERS T2
WHERE T2.ID= T1.ID;
然后,您只需触发选择查询即可获取所需的记录。
SELECT USERINFO FROM USERDETAILS WHERE NAME='UniqueName' and Nationality='Spanish';
约束:您需要拥有创建视图的权限。有时不会授予表结构修改权限,但可能允许您创建视图。