我有三个桌子。第一个表(“ 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
答案 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
。