SQL查询以在派生表中搜索匹配项

时间:2019-02-18 03:41:54

标签: php mysql

我有三个桌子。第一个表(“ MainTable”)包含带有数据和主键(称为“ MainKey”)的行。后两个表各包含两列。

第一个子表“ StatesTable”包含ID(与“ MainKey”匹配)和“ State”列的唯一组合,列是状态(即WA,CA)的缩写。

第二个子表“ CategoriesTable”包含一个ID(与“ MainKey”匹配)和一个列“ Category”的唯一组合,该列属于各种类别(例如,“律师”,“工程师”,“教师” “)。

我要实现的目标是在“ MainTable”中获取两个子表的各种已发布查询的所有匹配项。例如,如果用户选择三个状态(WA,CA,MT)和两个类别(“律师”,“工程师”),则查询应返回“ MainTable”中的所有匹配项,其中主键与子表的匹配项匹配。

我有用于子表的查询以检索不同的结果,但是我不确定如何在主查询中使用这些派生表来搜索主MainKey“ WITHIN”派生表结果的所有匹配项。

以下是我查询“ States”子表的示例。谢谢您的帮助。

SELECT DISTINCT MainKey
FROM (
    SELECT * 
    FROM `StatesTable` 
    WHERE State IN ('WA','CA','MT')
) t

1 个答案:

答案 0 :(得分:0)

假设您只需要WA,CA或MT的律师或工程师,则使用两个IN表达式的查询应为您提供所需的结果:

SELECT *
FROM MainTable
WHERE MainKey IN (SELECT DISTINCT MainKey 
                  FROM StatesTable 
                  WHERE State IN ('WA', 'CA', 'MT'))
  AND MainKey IN (SELECT DISTINCT MainKey 
                  FROM CategoriesTable 
                  WHERE Category IN ('Lawyer', 'Engineer'))

如果您希望是律师或工程师,或者居住在华盛顿州,加利福尼亚州或MT的人,只需将AND子句中的WHERE更改为OR