我需要做的是同一查询中的AND和OR,我知道这是不可能的,所以寻找替代方案,请帮忙!
我在ee中有两个类别组,一个是确定哪些用户能够看到该文件,另一个是将文件过滤到不同的组。
我需要做的是选择类别19中的每个文件(这是为了确定用户组),然后我需要在其中一个过滤器类别中进行检查。不幸的是,每次为文件分配新类别时,都会在表中创建一个新行,例如下面的非工作sql示例。
SELECT c.cat_id,
f.*
FROM exp_file_categories c
inner join exp_files f ON (c.file_id = f.file_id)
where c.cat_id in (20, 21)
AND c.cat_id = 19
group by c.file_id
答案 0 :(得分:1)
不知道你的表我假设你想要做以下
首先:你想得到类别19中的file_id列表:
SELECT
file_id
FROM
exp_file_categories
WHERE
cat_id = 19
现在您想看看,哪些文件与cat_ids 20或21有关联:
您可以使用子查询(用于过滤)
SELECT DISTINCT
f.file_id
-- , other columns from exp_files
FROM
exp_files f
INNER JOIN
exp_file_categories c
ON
f.file_id = c.file_id
WHERE
c.file_id IN (20, 21)
AND
f.file_id IN (
SELECT
c1.file_id
FROM
exp_file_categories c1
WHERE
c1.cat_id = 19
)
您还可以将外部查询加入子查询。您必须为子查询指定别名。
否则,您可以在WHERE
子句中使用两个子查询:
SELECT
<field_list>
FROM
exp_files
WHERE
-- file_id is in the list of files associated with category 19
f.file_id IN (
SELECT
c1.file_id
FROM
exp_file_categories c1
WHERE
c1.cat_id = 19
)
AND
-- file_id is in the list of files associated with category 20 and 21
f.file_id IN (
SELECT
c2.file_id
FROM
exp_file_categories c2
WHERE
c1.cat_id IN (20, 21)
)
您应该检查这些查询的执行计划