gpt4 book ai didi

php - Mysql IN 子句带有类似 not HAVING 的内容

转载 作者:行者123 更新时间:2023-11-29 12:57:03 25 4
gpt4 key购买 nike

我已经尝试了 1 周,但无法实现。我尝试了很多方法,但没有得到任何解决方案。我将在下面解释这一点:

选项表:

+---------+-----------+------------+
| id | name | major |
+---------+-----------+------------+
| 1 | option 1 | 1 |
| 2 | option 2 | 1 |
| 3 | option 3 | 1 |
| 4 | option 4 | 0 |
| 5 | option 5 | 0 |
| 6 | option 6 | 0 |
+---------+-----------+------------+

项目表

+---------+-----------+
| id | name |
+---------+-----------+
| 1 | item 1 |
| 2 | item 2 |
| 3 | item 3 |
+---------+-----------+

items_options

+---------+-----------+
| item_id |option_id |
+---------+-----------+
| 1 | 1 |
| 1 | 2 |
| 1 | 3 |
| 1 | 4 |
| 1 | 5 |
| 1 | 6 |
| 2 | 1 |
| 2 | 2 |
| 2 | 3 |
| 2 | 6 |
| 3 | 1 |
| 3 | 3 |
| 3 | 5 |
| 3 | 6 |
+---------+-----------+

因此,如果我选择 items_options.option_id IN (1,3)options.major = 1,我得到:

+---------+----------+
| item_id | name |
+---------+----------+
| 1 | item 1 |
| 2 | item 2 |
| 3 | item 3 |
+---------+----------+

但我应该得到以下内容:

+---------+----------+
| item_id | name |
+---------+----------+
| 3 | item 3 |
+---------+----------+

我实际上不需要考虑非主要选项,但是当我选择1,3时,我应该只得到第二个结果,如果它有额外的主要选项,那么它不应该出现在列表中。结果应仅包含确切的选项,而不是更多或更少的选项。

我尝试过的 MySQL 查询:

SELECT items.id,items.name FROM items
INNER JOIN items_options ON items_options.option_id = items.id
INNER JOIN options ON options.id = items_options.option_id
WHERE items_options.option_id IN (1,3) AND options.major = 1
GROUP BY items.id

我只有 3 个主要选项,所以我也尝试使用以下选项。最后有 COUNT(DISTINCT items_options.option_id) = 2

编辑1:

sqlfiddle: http://sqlfiddle.com/#!2/280bf3/1

最佳答案

您需要将 option_id in (1,3) 时的 count(distinct option_id) 与总体 distinct option_id 的计数进行比较,按major = 1过滤。

实现此目的的一种方法是将 COUNTCASE 结合使用:

SELECT items.id, items.name
FROM items
INNER JOIN items_options io ON io.item_id = items.id
INNER JOIN options o ON io.option_id = o.id AND o.major = 1
GROUP BY items.id
HAVING COUNT(DISTINCT
CASE WHEN io.option_id IN (1,3)
THEN io.option_id
END) = COUNT(DISTINCT io.option_id)

关于php - Mysql IN 子句带有类似 not HAVING 的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23894818/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com