如何获取与值数组匹配的所有值?

时间:2017-01-24 08:42:39

标签: mysql

我的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值)?

提前致谢!

3 个答案:

答案 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';

约束:您需要拥有创建视图的权限。有时不会授予表结构修改权限,但可能允许您创建视图。